开发者

uninitialized $_ in array element

开发者 https://www.devze.com 2023-03-23 10:33 出处:网络
I have code that contains: use strict; use warnings; use List::Util; my $index = first { $ARGV[$_] eq \"something\"; } 0..$#ARGV;

I have code that contains:

use strict;
use warnings;
use List::Util;
my $index = first { $ARGV[$_] eq "something"; } 0..$#ARGV;

but I get

Use of uninitialized value $_ in arra开发者_运维问答y element at a.pl line 4.

What could cause this ?


As your question lacks information, I can only guess at the real problem, but I managed to get a similar error with:

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.

The error does not appear if I use List::Util qw/first/ explicitly, or if I use the full package name: List::Util::first. So, my guess is that the first function is not properly imported, and does not recognize the list after the code block, leaving $_ uninitialized.

The error most likely lies elsewhere in your code.


Are you familiar with

new Class @args

That's called the "indirect method notation". It means

Class->new(@args)

If first isn't declared,

first { $ARGV[$_] eq "something"; } 0..$#ARGV;

is treated as an indirect method call, so it's equivalent to

{ $ARGV[$_] eq "something"; }->first(0..$#ARGV);

{ ... } constructs a hash, which is neither a package name or an object reference as required by a method call, thus

Can't call method "first" without a package or object reference 

The solution: declare first by importing it.

0

精彩评论

暂无评论...
验证码 换一张
取 消