【发布时间】:2016-04-02 07:22:02
【问题描述】:
我想通过子函数修改一个哈希数组,因此我想通过引用传递数组,在子函数中取消引用并进一步修改它。
在此修改后,数组应立即保存修改后的值,我不想显式返回修改后的哈希(想在原始数组上工作)。
不幸的是,我没有成功。有很多关于访问哈希数组引用的网络提示,但我找不到操纵数组的提示。
my @array_of_hashes = ( {name => "Alice"},
{name => "Bob"} );
my $myhashref = \%{$array_of_hashes[0]}; # This holds a ref to {name=>"Alice"}
my %myhash = %{$myhashref}; # De-reference, shall be the Hash to work on
print $myhash{name} . "\n"; # This shows Alice
$myhash{age}=32; # Want to add 'age' to the Alice Hash, does not work
这个修改后的哈希不显示{age}。当您查看@array_of_hashes 和print Data::Dump::dump(@array_of_hashes) 时,$myhash{age}=32; 行对@array_of_hashes 没有影响。
我怎样才能交出参考,例如@array_of_hashes 的第一个元素到函数以及如何在函数中取消引用它才能修改 @array_of_hashes 中的哈希?
【问题讨论】:
-
my %myhash = %{$myhashref}; # De-reference, shall be the Hash to work on这将使用 myhashref 的内容创建一个名为 myhash 的新变量。它是它的副本,它不是同一个变量,因此您对 myhash 所做的任何更改都不会反映在 myhashref 中 -
$myhashref->{age} = 32有效。虽然您可以这样做:my $hashref = $array_of_hashes[0],但您不需要引用它的取消引用。 -
好的,谢谢大家赐教!取消引用总是会创建原始对象的副本。每次当函数要修改作为函数参数给出的变量时,都必须考虑这一点!
标签: arrays perl hash reference