在下面的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」],);如果這段代碼沒有創建數組的散列,那麼你能解釋一下它在做什麼。 –