语言是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
关键字来声明数组变量。我将=~
运算符的结果作为列表返回到数组中。在我尝试使用perldata中概述的$#array
获取最后一个索引之前,我正在测试数组以确保它们中包含元素。
当我关闭严格时,它会按预期工作。
在我将任何内容放入其中之前,我已经尝试将它们预先声明为数组:
my @relAuthorList = [];
my @metaAuthorList = [];
这也不起作用。
围绕此问题的大多数答案都涉及范围错误,但我看不到我在这里做过的任何问题。有些涉及忘记用my
声明变量,但我已经这样做了。我见过一个涉及类型不匹配的问题,试图将标量视为数组。我找不到与此相关的任何内容。
所以我问:我在这里做错了什么?
答案 0 :(得分:2)
严格在这里工作。 2个数组的声明拼写与第87和105行中的拼写不同。
此外,您对数组!= 0
的检查将允许空数组(== -1
)。如果您要检查的元素超过1个,那么如果我在此了解您的意图,那么测试将为>=1
。也许你的意思是@relAuthorList != 0
(表示项目的数量是1或更多)。