在使用智能匹配的代码行之后,我的代码中立即出现很多Global symbol <symbol> requires explicit package name错误。在使用智能匹配之前,所有这些全局变量都已定义且代码已工作。

if (ref($aActivityErrorStrings) eq "ARRAY" && $sChompedOutput ~~ @$aActivityErrorStrings)


错误的第一行提示我我的智能匹配用法有问题。错误行是

Status message: Failed: syntax error at common.pm line 320, near "$sChompedOutput ~" Global symbol "$rOutput" requires explicit package name


我的Perl版本是5.12

有人可以告诉我智能匹配有什么问题吗?



我的错人。此代码的用户正在具有Perl版本5.8的设备上运行它。

感谢您的所有反馈。申请者很多。

最佳答案

错误在这里:

if (ref($aActivityErrorStrings) eq "ARRAY"
    && $sChompedOutput ~~ @$aActivityErrorStrings))
                                                 ^
                                                 |


您还有一个额外的结束括号。这证明您的代码可以正常工作:

use strict;
use warnings;
use 5.020;


my $aActivityErrorStrings = [
    "Error1",
    "Error2",
];

my $sChompedOutput = "Error1";

if (ref($aActivityErrorStrings) eq "ARRAY"
    && $sChompedOutput ~~ @$aActivityErrorStrings) {
    say 'yes'
}

say "@$aActivityErrorStrings";

--output:--
Smartmatch is experimental at 1.pl line 14.
yes
Error1 Error2

08-27 04:09