PERL 引用與解引用

2021-07-07 09:55:59 字數 1685 閱讀 7080

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 中還有乙個名字就是 解引用 他的意思就是解釋引用,說的通俗一點就是,直接去尋找指標所指的位址裡面的內容,此內容可以是任何資料型別,當然也可以是指標 這就是雙重指標,後面將會討論 需要注意的是,在變數宣告的時...