Подтвердить что ты не робот

Назначение Perl с фиктивным заполнителем

В других языках, которые я использовал как Erlang и Python, если я разделяю строку и не забочусь об одном из полей, я могу использовать подстрочный знак подчеркивания. Я пробовал это в Perl:

   (_,$id) = split('=',$fields[1]);

Но я получаю следующую ошибку:

Невозможно изменить постоянный элемент в списке в строке. /generate _datasets.pl, строка 17, рядом с ");"
Выполнение./generate_datasets.pl отменено из-за ошибок компиляции.

Есть ли у Perl подобный шаблон, который я мог бы использовать вместо создания бесполезных временных переменных?

4b9b3361

Ответ 1

undef выполняет ту же самую задачу в Perl.

(undef, $something, $otherthing) = split(' ', $str);

Ответ 2

Вам даже не нужны заполнители, если вы используете Slices:

use warnings;
use strict;

my ($id) = (split /=/, 'foo=id123')[1];
print "$id\n";

__END__

id123

Ответ 3

Вы можете назначить (undef).

(undef, my $id) = split(/=/, $fields[1]);

Вы даже можете использовать my (undef).

my (undef, $id) = split(/=/, $fields[1]);

Вы также можете использовать фрагмент списка.

my $id = ( split(/=/, $fields[1]) )[1];

Ответ 4

И просто объясните, почему вы получаете конкретную ошибку, которую видите...

_ - внутренняя переменная Perl, которая может использоваться в команде stat для обозначения "того же файла, что и в предыдущем вызове stat". Таким образом Perl использует кэшированную структуру данных stat и не делает другого вызова stat.

if (-x $file and -r _) { ... }

Этот дескриптор файла является постоянным значением и не может быть записано. Переменная хранится в том же ключевом слове, что и $_ и @_.

См. perldoc stat.