我应该使用$_ [0]还是复制Perl中的参数列表?
发布时间:2020-12-16 06:12:02 所属栏目:大数据 来源:网络整理
导读:如果我将哈希传递给子: parse(%data); 我应该首先使用变量$_ [0]还是可以在我想从哈希中获取元素时继续访问$_ [0]?澄清: sub parse{ $var1 = $_[0]-{'elem1'}; $var2 = $_[0]-{'elem2'}; $var3 = $_[0]-{'elem3'}; $var4 = $_[0]-{'elem4'}; $var5 = $_[
如果我将哈希传递给子:
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'}; } 此外,更具描述性的变量名称也将改进您的代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |