Присвоение @_ списку может принести некоторые дополнительные полезные функции.
Это немного облегчает добавление дополнительных именованных параметров на более позднем этапе, так как вы изменяете свой код. Некоторые люди считают, что это особенность, подобно тому, как завершение списка или хэша с завершающим ',' немного облегчает добавить членов в будущем.
Если вы привыкли использовать эту идиому, то смещение аргументов может показаться вредным, потому что, если вы отредактируете код, добавив дополнительный аргумент, вы можете получить небольшую ошибку, если не заплатите внимание.
, например
sub do_something {
my ($foo) = @_;
}
позже отредактировано до
sub do_something {
my ($foo,$bar) = @_; # still works
}
однако
sub do_another_thing {
my $foo = shift;
}
Если другой коллега, который догматически использует первую форму (возможно, они думают, что сдвиг - это зло), редактирует ваш файл и рассеянно обновляет его, чтобы прочитать
sub do_another_thing {
my ($foo, $bar) = shift; # still 'works', but $bar not defined
}
и они могли внести небольшую ошибку.
Назначение @_ может быть более компактным и эффективным с вертикальным пространством, когда у вас есть небольшое количество параметров для одновременного назначения. Это также позволяет вам указывать аргументы по умолчанию, если вы используете стиль хэша параметров именованных функций
, например
my (%arguments) = (user=>'defaultuser',password=>'password',@_);
Я бы все равно считал это вопросом стиля / вкуса. Я думаю, что самое главное - применять тот или иной стиль последовательно, подчиняясь принципу наименьшего удивления.