语言是Perl。
#!/usr/bin/perl
use strict;
[...]
while ( my $res = $async->wait_for_next_response )
{
[...]
if ($res->is_success)
{
[...]
my @relAuthorList = ($res->content =~ /<a +rel=\"author\" +href=\".*?\".*?>.*?<\/a>/gi);
if (@relAuthorList)
{
if ($#relAuthorlList != 0) # Line 87
{
[...]
}
[...]
}
my @metaAuthorList = ($res->content =~ /<meta +name=\"author\" +content=\".*?\" *?>/gi);
if (@metaAuthorList)
{
if ($#metaAuthorlList != 0) # Line 105
{
[...]
}
[...]
}
[...]
}
[...]
}
当我运行它时,出现以下错误:
$ ./findAuthorCanonical
Global symbol "@relAuthorlList" requires explicit package name at ./findAuthorCanonical line 87.
Global symbol "@metaAuthorlList" requires explicit package name at ./findAuthorCanonical line 105.
Execution of ./findAuthorCanonical aborted due to compilation errors.
$
我很困惑 严格开启。我正在使用my
关键字来声明数组变量。我从=~
操作员返回结果作为数组列表。我正在测试数组以确保它们中包含元素,然后再尝试使用$#array
perldata中概述的来获取最后一个索引。
当我严格关闭电源时,它会按预期运行。
在将任何内容放入它们之前,我尝试过将它们声明为数组:
my @relAuthorList = [];
my @metaAuthorList = [];
那也不起作用。
有关此问题的大多数答案都涉及范围界定错误,但我看不到我在这里所做的任何事情。有些涉及忘记使用声明变量,my
但我已经做到了。我见过一个涉及类型不匹配的示例,试图将标量视为数组。我找不到与此相关的任何内容。
所以我问:我在这里做错了什么?
严格在这里工作。这两个数组的声明与第87和105行中的拼写方式不同。
另外,检查数组!= 0
将允许使用空数组(== -1
)。如果您要检查1个以上的元素,那么测试就是>=1
我是否了解您的意图。可能是您的意思@relAuthorList != 0
(表示项目数为1或更多)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句