В последнее время я решил чаще использовать Perl :: Critic на моем код. После программирования на Perl в течение почти 7 лет я привык к большинству лучших практик Perl на долгое время, но я знаю, что всегда есть возможности для улучшения. Однако меня беспокоит то, что Perl :: Critic не Мне не нравится, как я распаковываю @_ для подпрограмм. Например:
sub my_way_to_unpack {
my $variable1 = shift @_;
my $variable2 = shift @_;
my $result = $variable1 + $variable2;
return $result;
}
Я всегда так поступал, и, как это обсуждалось как в PerlMonks, так и в Stack Overflow, это тоже не обязательно зло.
Изменение приведенного выше фрагмента кода на ...
sub perl_critics_way_to_unpack {
my ($variable1, $variable2) = @_;
my $result = $variable1 + $variable2;
return $result;
}
... тоже работает, но мне труднее читать. Я также прочитал книгу Дамиана Конвея Perl Best Practices, и я не совсем понимаю, как мой предпочтительный подход Распаковка подпадает под его предложение избегать прямого использования @_
, поскольку Perl :: Critic подразумевает. Мне всегда казалось, что Конвей говорил о таких мерзостях, как:
sub not_unpacking {
my $result = $_[0] + $_[1];
return $result;
}
Приведенный выше пример плох и труден для чтения, и я бы никогда не подумал написать это в виде части производственного кода.
Короче говоря, почему Perl :: Critic считает мой предпочтительный способ плохим? Неужели я совершаю чудовищное преступление, распаковывая вещи, используя смену?
Будет ли это то, что, по мнению других людей, следует поднять с помощью Perl :: Critic сопровождающие?
shift
работает с@_
, когда не указана никакая переменная. Однако было бы полезно узнать, какое правило Perl :: Critic хочет это изменить. - person Powerlord   schedule 16.02.2010--brutal
я не получаю никаких жалоб на распаковку аргументов для вашего примера кода. Какую версию Perl :: Critic вы используете? (Я использую 1.105) - person Michael Carman   schedule 17.02.2010