在下面的C#代码:在Perl中将一个数组的地址分配给另一个可能吗?
int[] X = new int[2];
X[0] = 1;
X[1] = 2;
int[] Y = X;
X[1] = 3;
此执行后,Y [1]也将3由于操作Y = X并不做一个克隆,而是分配什么X指向的引用或指针如果相同的操作的Perl 5下试图在为Y.
:
my @X = (1, 2);
my @Y = @X;
$X[1] = 3;
不同于C#,Y [1]不为3,但仍2,这表明的Perl使得数组的副本在@Y = @X操作之后。
所以,我的问题是 - 是否有任何方法来分配或初始化一个Perl 5数组与另一个Perl数组的引用,使他们都指向相同的数据?我已经知道引用,并尝试解引用对数组的引用,但也是复制。我也知道使用对数组的引用将解决我正在尝试做的大部分工作,所以我不需要任何显示如何使用引用的答案。
如果使用复杂的数据结构 - 例如包含数组作为值的哈希表数组。可以使用别名来获取这些单独结构中的每一个,包括散列表值中使用的数组?在其他语言中,这可以轻松完成。如果这在Perl中不容易完成,那么它意味着复杂的数据结构应该使用引用。例如,上面的数据结构可以被定义为包含对数组引用值的散列引用数组。 –
@Bob布莱恩,你不能有数组作为哈希的值。哈希值只能是标量,比如对数组的引用。 – ikegami
我对Perl还是一个新手,所以我可能会对此错误。但是,根据编程Perl第4版:第9章:数据结构在数据结构下的数组结构(Hashes of Arrays)主题显示了如何将数组添加到散列的几个示例:%Hoa(flinstones => [“fred”,“barney”] ,jetsons => [“george”,“jane”,“elroy”],simpsons => [“homer”,“marge”,“bart”],);如果这段代码没有创建数组的散列,那么你能解释一下它在做什么。 –