неинициализированный $ _ в элементе массива - PullRequest
1 голос
/ 27 июля 2011

У меня есть код, который содержит:

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 ]

3 голосов
/ 27 июля 2011

Поскольку в вашем вопросе недостаточно информации, я могу только догадываться о реальной проблеме, но мне удалось получить похожую ошибку с:

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 голос
/ 28 июля 2011

Вы знакомы с

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, импортировав его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...