数组元素中未初始化的$ _

时间:2011-07-27 11:30:53

标签: perl variables initialization

我的代码包含:

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.

是什么导致这种情况?

2 个答案:

答案 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