我应该使用$_ [0]还是复制Perl中的参数列表?

前端之家收集整理的这篇文章主要介绍了我应该使用$_ [0]还是复制Perl中的参数列表?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我将哈希传递给子:

parse(\%data);

我应该首先使用变量$_ [0]还是可以在我想从哈希中获取元素时继续访问$_ [0]?澄清:

sub parse
{    $var1 = $_[0]->{'elem1'};
     $var2 = $_[0]->{'elem2'};
     $var3 = $_[0]->{'elem3'};
     $var4 = $_[0]->{'elem4'};
     $var5 = $_[0]->{'elem5'};
}
# Versus
sub parse
{    my $hr = $_[0];
     $var1 = $hr->{'elem1'};
     $var2 = $hr->{'elem2'};
     $var3 = $hr->{'elem3'};
     $var4 = $hr->{'elem4'};
     $var5 = $hr->{'elem5'};
}

第二个版本是否更正确,因为它不必继续访问参数数组,或者Perl最终是否以相同的方式互相干扰它们?

解决方法

在这种情况下没有区别,因为您正在传递对哈希的引用.但是在传递标量的情况下会有区别:

sub rtrim {
    ## remove tailing spaces from first argument
    $_[0] =~ s/\s+$//;
}
rtrim($str); ## value of the variable will be changed

sub rtrim_bugged {
    my $str = $_[0]; ## this makes a copy of variable
    $str =~ s/\s+$//;
}
rtrim($str); ## value of the variable will stay the same

如果您要传递哈希引用,则只创建引用副本.但哈希本身也是一样的.因此,如果您关心代码可读性,那么我建议您为所有参数创建一个变量.例如:

sub parse {
     ## you can easily add new parameters to this function
     my ($hr) = @_; 

     my $var1 = $hr->{'elem1'};
     my $var2 = $hr->{'elem2'};
     my $var3 = $hr->{'elem3'};
     my $var4 = $hr->{'elem4'};
     my $var5 = $hr->{'elem5'};
}

此外,更具描述性的变量名称也将改进您的代码.

猜你在找的Perl相关文章