我正在尝试创建简单的PerlQt应用程序但是当我启动我的Perl脚本时出现此错误:
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /usr/local/lib/x86_64-linux-gnu/perl/5.22.1/QtCore4.pm line 1420.
Compilation failed in require at ./perlqt.pl line 5.
BEGIN failed--compilation aborted at ./perlqt.pl line 5.
代码:
#!/usr/bin/perl
use strict;
use warnings;
use QtCore4;
use QtGui4;
use Window;
sub main
{
my $app = Qt::Application( \@ARGV );
if (!Qt::SystemTrayIcon::isSystemTrayAvailable()) {
Qt::MessageBox::critical(0, Qt::Object::this->tr('Systray'),
Qt::Object::this->tr('I couldn\'t detect any system tray ' .
'on this system.'));
return 1;
}
Qt::Application::setQuitOnLastWindowClosed(0);
my $window = Window();
$window->show();
return $app->exec();
}
exit main();
请问如何解决?我的代码中没有使用任何数组。
答案 0 :(得分:4)
无法使用'定义(@array)' (也许你应该在QtCore4.pm第1420行忽略定义的()?)。
QtCore4
做了一些毫无意义的事情。现在,它"工作" -albeit noisly-but
@{$classinfos} = () if !defined @{$classinfos};
@{$signals} = () if !defined @{$signals};
@{$slots} = () if !defined @{$slots};
应改为
$classinfos ||= [];
$signals ||= [];
$slots ||= [];
QtCore4.pm
中的。
" SvREFCNT_inc" Devel :: Peek模块不会导出 在QtGui4.pm第25行导入错误后无法继续。
这似乎是Devel :: Peek中的一个错误。它曾用于导出SvREFCNT_inc
,文档仍然声称它确实存在,但它不再存在。
您可以通过替换
解决此问题use Devel::Peek qw( SvREFCNT_inc );
与
use Devel::Peek qw( );
BEGIN { *SvREFCNT_inc = \&Devel::Peek::SvREFCNT_inc; }
QtGui4.pm
中的:
(注意,Perl代码永远不必使用SvREFCNT_inc
,所以如果不是bug,它会使用hack!)