【发布时间】:2017-05-01 19:23:48
【问题描述】:
语言是 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 声明变量,但我已经做到了。我见过一个涉及类型不匹配的问题,试图将标量视为数组。我找不到与此相关的任何内容。
所以我问:我在这里做错了什么?
【问题讨论】:
-
[]创建对空数组的引用。my @array;足以初始化一个数组。 -
由于一个简单的印刷错误,我投票决定将此作为题外话结束。
-
比较:
@relAuthorList与@relAuthorlList和@metaAuthorList与@metaAuthorlList(“作者”之后的额外“l”)。 -
:) 只需信任错误消息即可。