简而言之,我想知道是否有任何最佳实践理由来决定:
my %hash = ( foo => 1, bar => 2 );
# some in-between logic
some_func(\%hash);
和
my $hashref = { foo => 1, bar => 2 };
# some in-between logic
some_func($hashref);
或纯粹是一种风格决定?
答案 0 :(得分:1)
这两个例子完全相同。因此,它主要取决于哪个更方便您使用%list
变量和/或$listref
变量进行其他操作。
或者你可能想完全跳过额外的变量:
some_func( { foo => 1, bar => 2 } );
(现在你不太可能添加那些“中间逻辑”评论。)
答案 1 :(得分:1)
如上所述,它们是相同的,但第一个可能会为您在“一些中间逻辑”代码中使用的变量(即散列)提供更好的上下文。
答案 2 :(得分:1)
这两者是等价的,可互换的。应根据最清楚的决定做出决定。
你也可以来回移动:
my $hashref = {x => 1, y => 2};
our %hash; *hash = $hashref;
some_func($hashref);
some_func(\%hash); # \%hash == $hashref
一般情况下,我更喜欢使用复数形式%name
和@name
,因为它会因解除引用而导致较少的线条噪音。对于some_func(\%var)
的类型而言,var
与some_func($var)
相比更明确{/ 1}}
答案 3 :(得分:0)
在大多数情况下,它不会产生任何影响,但是如果我通过引用列表,我尝试更改我的参考点时会发生一些令人讨厌的错误。
除非我真的想要更改预先存在的数组或哈希的内容,否则我个人赞成使用匿名列表/哈希(就像你的第二个例子)。
但这只是个人经历。我承认,如果我更了解Perl,我会知道客观的最佳实践(如果有的话)。