4
我想要一个perl子例程,它通过Tie :: IxHash模块创建并返回一个有序散列。它看起来是这样的:在Perl中,如何从子例程返回一个并列散列?
sub make_ordered_hash {
my @hash_contents = munge_input(@_); # I get a list of alternating keys and values
tie(my %myhash, Tie::IxHash, @hash_contents);
return %myhash;
}
现在,如果我做my %ordered_hash = make_ordered_hash(@input_stuff)
,将%ordered_hash实际上被捆绑,或将它解压缩%myhash,到一个列表,然后创建一个新的(普通,无序的)从哈希清单?如果我不能以这种方式返回并列散列,我可以返回一个引用吗?也就是说,我可以通过让make_ordered_hash返回\%myhash
来修复它吗?
捆绑或不是,无论如何,返回一个大数据结构的ref可能是可取的(副本可能是昂贵的)。 – Thilo 2010-10-28 23:36:40
@Thilo - 确实,尽管有时候你想要一个副本,例如当你将数据传递到不能保证不变的多个地方时。例如。在某些算法中将用作堆栈的列表。复制速度当然是一个有效的考虑因素,请记住它需要在全文中查看;) – DVK 2010-10-28 23:42:22
同意。但在这种情况下,原始副本将会超出范围并收集垃圾。而且,还有一种情况是您将数据传递给多个地方,并希望查看他们所做的更改。 – Thilo 2010-10-28 23:48:18