Perl的转移与@_对子程序参数的赋值有差异吗?

前端之家收集整理的这篇文章主要介绍了Perl的转移与@_对子程序参数的赋值有差异吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
让我们忽略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不太清楚吗?欢迎有良好推理意见。

解决方法

有一个功能差异。 shift修改@_,而@_中的赋值不会。如果你以后不需要使用@_,那差异可能对你来说无关紧要。我尽量使用列表分配,但是我有时候使用shift。

但是,如果我从转移开始,就像这样:

my( $param ) = shift;

我经常创建这个bug:

my( $param,$other_param ) = shift;

那是因为我不经常使用班,所以我忘了转到作业的右边,把它改成@_。这是不使用班次的最佳做法。我可以像你的例子那样为每个班次制作单独的线条,但这只是乏味的。

猜你在找的Perl相关文章