为什么这不在范围内?为什么使用严格阻止这个?
Why isn't this in scope? Why is use strict blocking this?
语言是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
声明变量,但我已经做到了。我见过一个涉及类型不匹配的问题,试图将标量视为数组。我找不到与此相关的任何内容。
所以我问:我在这里做错了什么?
strict 在这里工作。 2 个数组的声明与第 87 行和第 105 行中的拼写不同。
此外,您对数组 != 0
的检查将允许空数组 (== -1
)。如果您要检查 1 个以上的元素,如果我理解您的意图,测试将是 >=1
。也许您的意思是 @relAuthorList != 0
(表示项目数为 1 或更多)。
语言是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
声明变量,但我已经做到了。我见过一个涉及类型不匹配的问题,试图将标量视为数组。我找不到与此相关的任何内容。
所以我问:我在这里做错了什么?
strict 在这里工作。 2 个数组的声明与第 87 行和第 105 行中的拼写不同。
此外,您对数组 != 0
的检查将允许空数组 (== -1
)。如果您要检查 1 个以上的元素,如果我理解您的意图,测试将是 >=1
。也许您的意思是 @relAuthorList != 0
(表示项目数为 1 或更多)。