PerlQt - 不能使用'defined(@array)'

时间:2017-04-03 17:09:09

标签: qt perl

我正在尝试创建简单的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();

请问如何解决?我的代码中没有使用任何数组。

1 个答案:

答案 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!)