我的代码包含:
use strict;
use warnings;
use List::Util;
my $index = first { $ARGV[$_] eq "something"; } 0..$#ARGV;
但我得到
Use of uninitialized value $_ in array element at a.pl line 4.
是什么导致这种情况?
答案 0 :(得分:3)
由于你的问题缺乏信息,我只能猜测真正的问题,但我设法得到了类似的错误:
C:\perl>perl -MList::Util -we "$a= first { $ARGV[$_] eq 'some' } 0..$#ARGV; print $a" foo bar some thing
Use of uninitialized value $_ in array element at -e line 1.
Can't call method "first" without a package or object reference at -e line 1.
如果我use List::Util qw/first/
明确地显示错误,或者我使用完整的包名称,则不会显示错误:List::Util::first
。所以,我的猜测是first
函数没有正确导入,并且在代码块之后无法识别列表,导致$_
未初始化。
错误最有可能出现在您的代码中。
答案 1 :(得分:1)
你熟悉
吗?new Class @args
这就是所谓的“间接方法符号”。这意味着
Class->new(@args)
如果未声明first
,
first { $ARGV[$_] eq "something"; } 0..$#ARGV;
被视为间接方法调用,因此它等同于
{ $ARGV[$_] eq "something"; }->first(0..$#ARGV);
{ ... }
构造一个哈希,它既不是方法调用所需的包名称也不是对象引用,因此
Can't call method "first" without a package or object reference
解决方案:通过导入来声明first
。