Назначение @_ списку может дать некоторые полезные дополнительные функции.
Это немного упрощает добавление дополнительных именованных параметров позже, когда вы изменяете свой код.Некоторые люди считают это функцией, похожей на то, как завершение списка или хеша с завершающим ',' упрощает добавление членов в будущее.
Если у вас есть привычка использовать эту идиому, то смещение аргументов может показаться вредным, потому что, если вы отредактируете код, чтобы добавить дополнительный аргумент, вы можете получить тонкую ошибку, если вы не обратите внимания.
e.g.
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
}
и они могли внести небольшую ошибку.
Назначение @_ может быть более компактным и эффективным с вертикальным пространством, когда у вас есть небольшое количество параметров для одновременного назначения. Он также позволяет вам указывать аргументы по умолчанию, если вы используете хэш-стиль именованных параметров функции.
e.g.
my (%arguments) = (user=>'defaultuser',password=>'password',@_);
Я все равно считаю это вопросом стиля / вкуса. Я считаю, что самое главное - последовательно применять тот или иной стиль, соблюдая принцип наименьшего удивления.
person
cms
schedule
25.08.2009