取得參照
規則1:若你在變數之前加上「\」,即可取得該變數的參照。$aref = \@array; # $aref now holds a reference to @array $href = \%hash; # $href now holds a reference to %hash $sref = \$scalar; # $sref now holds a reference to $scalar規則2:以「[ ITEMS ]」的方式建立新的匿名陣列,並回傳其參照;以「{ ITEMS }」的方式建立新的匿名雜湊,並回傳其參照。
$aref = [ 1, "foo", undef, 13 ]; # $aref now holds a reference to an array $href = { APR => 4, AUG => 8 }; # $href now holds a reference to a hash以下兩種做法的結果皆相同:
# This: $aref = [ 1, 2, 3 ]; # Does the same as this: @array = (1, 2, 3); $aref = \@array;因此若你隨手即以「[]」建立一個新的匿名陣列而不將其存到變數當中,你往後將不知道該如何取得此陣列的內容,雜湊亦如此。
使用參照
規則1:使用捲括號「{}」來使用陣列參照,因此你可以寫成 @{$aref} 來取代 @array。@a @{$aref} #An array reverse @a reverse @{$aref} #Reverse the array $a[3] ${$aref}[3] #An element of the array $a[3] = 17; ${$aref}[3] = 17 #Assigning an element雜湊規則如同陣列
%h %{$href} #A hash keys %h keys %{$href} #Get the keys from the hash $h{'red'} ${$href}{'red'} #An element of the hash $h{'red'} = 17 ${$href}{'red'} = 17 #Assigning an element規則2:${$aref}[3] 可用 $aref->[3] 來取代; ${$href}{red} 可用 $href->{red}來取代。 若 $aref 存的是某一陣列的參照,則 $aref->[3] 表示為此陣列的第四個元素。千萬不要把 $aref->[3] 與 $aref[3] 這兩者搞混,$aref[3] 當中的 $aref 不過是暫時取代了 @aref 的虛偽表示法;同樣的道理也發生在雜湊當中,不要把$href->{red} 與 $href{red} 給搞混,後者是 %href 的虛偽表示法。
簡單範例
@a = ( [1, 2, 3], [4, 5, 6], [7, 8, 9] );@a 陣列有三個元素,每個元素皆以參照存放。 $a[1] 即可取得 (4, 5, 6) 這個陣列的參照,因此可進一步使用 $a[1]->[2] 的方式取得該陣列的第三個元素,即可傳回「6」。同理 $a[0]->[1] 會傳回「2」。 這是一個二維陣列的例子,你能以 $a[ROW]->[COLUMN] 的方式取值,卻很麻煩。因此多維陣列可以再將其縮寫為 $a[ROW][COLUMN],將「->」省略。
翻譯自:http://perldoc.perl.org/perlreftut.html