我想以我能理解的各種方式使用對數組的引用。
這裏是我的審判之一: -使用對匿名數組的引用作爲數組的一個元素
my $RoR = [[2, 3], [4, 5, 7]];
my @AoA = ([2, 3], [[2, 3], [4, 5, 7]]);
my @AwR = ([2, 3], @{$RoR});
print $AoA[1][1][1], "\n"; # 1
print $AoA[1]->[1][1], "\n"; # 2
#print $RoR[0][1], "\n"; # 3
print $RoR->[0][1], "\n"; # 4
print $AwR[1][1][1], "\n"; # 5
print $AwR[1]->[1][1], "\n"; # 6
正如你所看到的,我有三個不同的陣列。
$RoR
- >是一個匿名陣列,它包含兩個匿名數組@AoA
基準 - >是含有2匿名數組的數組。第二匿名陣列是相同陣列由參考$RoR
@AwR
指向 - >幾乎是相同@AoA
,但是,而不是一個新的匿名陣列,我已經添加了參考@{$RoR}
本身的差異,在裏面。所以,基本上我認爲,最後兩個陣列幾乎是一樣的。現在
,問題是,他們沒有以同樣的方式行爲。
打印報表
1
,並且2
工作正常,並打印出來作爲結果的值5
。打印語句
3
是給出錯誤,我知道爲什麼,所以沒有問題。按預期打印語句4
正在打印值3
。現在,打印語句
5
和6
在嘗試運行該程序時會拋出一些錯誤。"Can't use string ("2") as an ARRAY ref while \"strict refs\" in use at D:/_Perl Practice/3perldsc/array_of_array.pl line 15."
然後我試着使用: -
print $AwR[1][1]->[1], "\n";
print @{$RoR}[1]->[1];
在哪裏,我換成$AwR[1]
與@{$RoR}
,爲$AwR[1]
包含@{$RoR}
。第二個工作正常,而第一個仍然在拋出錯誤。
那麼,1st two
和last two
打印語句之間究竟有什麼區別?我認爲它們是相同的,因此應該對相同的索引訪問給出相同的結果。但事實並非如此。我是否以某種錯誤的方式使用該參考?
好的,現在上面的疑問很清楚。所以,我發佈了一個答案,積累了與這個問題有關的一般東西。請看下面的內容。在這方面,我在5th and 6th
print語句疑問,並瞭解它我嘗試了以下測試: -
print $AwR[1][1]; # Allowed as `$AwR[1]` is same as `$$RoR`.
print $$RoR[1]; # Allowed as in 3(b)
print $AwR[1]->[1]; # Confused here. It is allowed
print $$RoR->[1]; # But this is not.
前三聲明打印相同reference value
。但最後一個失敗。所以,它確信: - $AwR[1]
與$$RoR
相同。但是,爲什麼$$RoR->[1]
不工作,而$AwR[1]->[1]
正在工作?它扔我這個錯誤: -
Not a SCALAR reference at D:/_Perl Practice/3perldsc/array_of_array.pl line 24.
那麼,以兩種不同的方式使用它有什麼區別?
我可以推薦優秀的文檔['perldoc perlreftut'](http://p3rl.org/reftut),它真的幫助我學習這些東西! –
@JoelBerger。謝謝你,但我只是從中學習。我發佈了這個例子,只有在理解文檔後才知道.. :( –