在Perl中,应该在什么基础上选择传递对散列/数组的引用和传递hashref / arrayref标量?

时间:2011-03-02 19:57:21

标签: perl coding-style

简而言之,我想知道是否有任何最佳实践理由来决定:

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);

或纯粹是一种风格决定?

4 个答案:

答案 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)的类型而言,varsome_func($var)相比更明确{/ 1}}

答案 3 :(得分:0)

在大多数情况下,它不会产生任何影响,但是如果我通过引用列表,我尝试更改我的参考点时会发生一些令人讨厌的错误。

除非我真的想要更改预先存在的数组或哈希的内容,否则我个人赞成使用匿名列表/哈希(就像你的第二个例子)。

但这只是个人经历。我承认,如果我更了解Perl,我会知道客观的最佳实践(如果有的话)。