该语言是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
获取最后一个索引之前,我正在测试这些数组以确保它们中有元素。
当我严格禁用时,它按预期工作。
我已经试过predeclaring他们作为阵列之前,我把所有的内容在其中:
my @relAuthorList = [];
my @metaAuthorList = [];
这也不能工作。
围绕此问题的大部分答案都涉及范围错误,但我无法看到我在此处做出的任何答案。一些涉及忘记与my
宣布一个变量,但我已经做到了。我看到一个涉及类型不匹配的尝试将一个标量视为一个数组。我找不到与此相关的任何内容。
所以我问:我在这里做错了什么?
'[]'创建一个空数组的引用。 '我的@array;'足以初始化一个数组。 –
由于简单的印刷错误,我正在投票关闭这个题目。 –
比较:'@ relAuthorList'与'@ relAuthorlList'和'@ metaAuthorList'与'@ metaAuthorlList'(在“作者”之后的多余“l”)。 – ThisSuitIsBlackNot