最近,我决定开始使用 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 上讨论的那样,它的 not necessarily evil要么。
将上面的代码片段更改为...
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认为我的首选方式不好?我用shift拆包真的犯了滔天大罪吗?
除了我之外,其他人是否认为这应该与 Perl::Critic 一起提出来?维护者?
最佳答案
简单的答案是 Perl::Critic 在这里并没有遵循 PBP。这 书中明确指出,转变习惯用法不仅可以接受,而且 在某些情况下实际上是首选。
关于perl - 为什么 Perl::Critic 不喜欢使用 shift 来填充子例程变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2275317/