【发布时间】:2017-04-03 14:41:51
【问题描述】:
我是从 C/C++ 背景来到 Perl 的,进展非常缓慢,所以请多多包涵...
我有一个哈希数组,我想将数组中的一个元素传递给一个子例程(通过引用),在该子例程中该元素将被修改。
use strict;
use warnings;
use Data::Dumper;
my @array;
my %hash;
$hash{'key1'} = 1;
$hash{'key2'} = 2;
$hash{'key3'} = 3;
$hash{'key4'} = 4;
push @array, {%hash};
$hash{'key1'} = 10;
$hash{'key2'} = 20;
$hash{'key3'} = 30;
$hash{'key4'} = 40;
push @array, {%hash};
# Expect:
# @array[0] like 1,2,3,4
# @array[1] like 10,20,30,40
print Dumper(@array);
doChange(\@array[1]); # <<==== THIS IS THE BIT WHERE I NEED ASSISTANCE TO PASS ARRAY ELEMENT BY REFERENCE, IF POSSIBLE
# Expect:
# @array[0] like 1,2,3,4
# @array[1] like 100,200,300,400 <<== VALUES HAVE CHANGED
print Dumper(@array);
sub doChange
{
my %h = @_; # <<=== THIS IS NOT RIGHT EITHER!?
$h{'key1'} = 100;
$h{'key2'} = 200;
$h{'key3'} = 300;
$h{'key4'} = 400;
}
【问题讨论】:
-
他正在将对哈希的引用推送到他的数组中。
{ %hash }和\%hash之间的唯一区别是前者获取%hash的副本并返回对该副本的引用,而后者返回对原始哈希的引用。 -
@DaveCross 哼,确实非常正确,我忽略了这一点,谢谢指出。