perl 語言中的引用類似於c/c++中的指標。 標量(scalar),列表(list),雜湊(hash),函式(sub),檔案控制代碼(handle)都可以使用引用來標記。引用本身又是乙個標量。
$scal_ref = \$scal; 標量引用
$arr_ref = \@arr; 列表引用
$hash_ref = \%hashe; 雜湊引用
$handle = \*stdout ; 檔案控制代碼引用
$routine = \&routine; 函式引用
sub routine()
首先 為什麼需要引用,或者說什麼時候要用引用。
(1),列表和雜湊的元素只能接受標量,如果使用列表或者雜湊構造多層級複雜資料結構,則列表或者雜湊的元素只能儲存雜湊或者列表的引用,如開始所說引用本身是乙個標量。
(2), 函式的引數只能傳遞標量。 這一點跟c++也是類似,c++的陣列作為引數,實際上傳遞的是指標。
列表和雜湊的元素只能是標量。也就是雜湊和列表的引用。比如下面的例子。
@array_e = (0,1,2);
$hash_e = {};
$arr_ref = \@array_e;
$hash_e = @array_e; #執行錯誤。
$hash_e = $arr_ref; #執行正常,列表也具有同樣限制,即雜湊或者列表的元素只能是標量。
$scal = 10;
@arr = (1,2,3);
%hashe = ("aa"=>"aa", "bb"=>"bb","cc"=>"cc");
下面我們主要討論標量,列表,和雜湊的解引用的方法。
第一種解引用解引用的方法:用引用替代原來的變數名。如果原來的標量名為scal 則用$scal_ref 替代原來的變數名。
$scal_ref = \$scal;
$arr_ref = \@arr;
$hash_ref = \%hashe;
print $$scal_ref;
print @$arr_ref;
print %$hash_ref;
print $$arr_ref[0];
print $$hash_ref;
第二種解引用解引用的方法:用替代原來的變數名。如果原來的標量名為scal 則用替代原來的變數名。
print $;
print @;
print %;
print $;
print $;
第二種和第一種的區別,如果引用時從雜湊或者列表中取出,則只能用第二種方法。如下列。
$h_ref = ;
foreach my $temp (@h_ref->) #執行錯誤
foreach my $temp (@)#執行正確
第三種解引用解引用的方法:只能用於於列表和雜湊訪問元素,而不能把劣幣哦和雜湊當成整體操作。
print $arr_ref->[0]
print $hash_ref->;
陣列和雜湊的匿名引用定義:
$arr = ;
$arr1 =[1,2,3];
$hash={};
$hash1=;
perl學習筆記 解引用小結
目前正在自學perl,看到關於dereference的一些寫法 array1 qw a b c array2 qw d e f array array ref array 假如要訪問array1中的第2個元素,可以有如下幾種寫法 array 0 1 寫法一 0 1 寫法二 array ref 0 1...
關於C中指標的引用,解引用與脫去解引用
在指標操作中的意義 1 大家都知道在寫int p 時,可以宣告乙個指標。很少人知道 在c c 中還有乙個名字就是 解引用 他的意思就是解釋引用,說的通俗一點就是,直接去尋找指標所指的位址裡面的內容,此內容可以是任何資料型別,當然也可以是指標 這就是雙重指標,後面將會討論 需要注意的是,在變數宣告的時...
關於C中指標的引用,解引用與脫去解引用
在指標操作中的意義 1 大家都知道在寫int p 時,可以宣告乙個指標。很少人知道 在c c 中還有乙個名字就是 解引用 他的意思就是解釋引用,說的通俗一點就是,直接去尋找指標所指的位址裡面的內容,此內容可以是任何資料型別,當然也可以是指標 這就是雙重指標,後面將會討論 需要注意的是,在變數宣告的時...