Ответ 1
undef
выполняет ту же самую задачу в Perl.
(undef, $something, $otherthing) = split(' ', $str);
В других языках, которые я использовал как Erlang и Python, если я разделяю строку и не забочусь об одном из полей, я могу использовать подстрочный знак подчеркивания. Я пробовал это в Perl:
(_,$id) = split('=',$fields[1]);
Но я получаю следующую ошибку:
Невозможно изменить постоянный элемент в списке в строке. /generate _datasets.pl, строка 17, рядом с ");"
Выполнение./generate_datasets.pl отменено из-за ошибок компиляции.
Есть ли у Perl подобный шаблон, который я мог бы использовать вместо создания бесполезных временных переменных?
undef
выполняет ту же самую задачу в Perl.
(undef, $something, $otherthing) = split(' ', $str);
Вам даже не нужны заполнители, если вы используете Slices:
use warnings;
use strict;
my ($id) = (split /=/, 'foo=id123')[1];
print "$id\n";
__END__
id123
Вы можете назначить (undef)
.
(undef, my $id) = split(/=/, $fields[1]);
Вы даже можете использовать my (undef)
.
my (undef, $id) = split(/=/, $fields[1]);
Вы также можете использовать фрагмент списка.
my $id = ( split(/=/, $fields[1]) )[1];
И просто объясните, почему вы получаете конкретную ошибку, которую видите...
_
- внутренняя переменная Perl, которая может использоваться в команде stat
для обозначения "того же файла, что и в предыдущем вызове stat
". Таким образом Perl использует кэшированную структуру данных stat и не делает другого вызова stat
.
if (-x $file and -r _) { ... }
Этот дескриптор файла является постоянным значением и не может быть записано. Переменная хранится в том же ключевом слове, что и $_
и @_
.
См. perldoc stat.