让我们忽略Damian Conway对于任何给定的子程序不超过三个位置参数的最佳做法。
使用班
sub do_something_fantastical { my $foo = shift; my $bar = shift; my $baz = shift; my $qux = shift; my $quux = shift; my $corge = shift; }
使用@_:
sub do_something_fantastical { my ($foo,$bar,$baz,$qux,$quux,$corge) = @_; }
只要这两个例子在性能和功能方面都是一样的,那么人们对另一种格式的看法呢?显然,使用@_的示例是较少的代码行,但是如其他示例所示,使用shift不太清楚吗?欢迎有良好推理意见。
解决方法
@H_502_17@ 有一个功能差异。 shift修改@_,而@_中的赋值不会。如果你以后不需要使用@_,那差异可能对你来说无关紧要。我尽量使用列表分配,但是我有时候使用shift。但是,如果我从转移开始,就像这样:
my( $param ) = shift;
我经常创建这个bug:
my( $param,$other_param ) = shift;
那是因为我不经常使用班,所以我忘了转到作业的右边,把它改成@_。这是不使用班次的最佳做法。我可以像你的例子那样为每个班次制作单独的线条,但这只是乏味的。