perl學習筆記 解引用小結

2021-05-23 13:10:05 字數 1381 閱讀 4838

目前正在自學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]                           寫法三

$array_ref->[0]->[1]                      寫法四

$array_ref->[0][1]                         寫法五

寫法二或許是初學者不熟悉perl時使用的方法,先寫出寫法一,然後用陣列引用代替陣列名array即可得到寫法二。

這裡應用了perl中陣列名和陣列引用相互替換的規則。

寫法三是寫法二的改進,也是另乙個規則的應用,即括號中如果是標量,則可以省略括號。

寫法四也是對寫法二的改進,可以使用->來取代{},以此方便使用。

寫法五是對寫法四的改進,即省略->,使得表達形式更加簡介緊湊。

這裡有人可能會問為什麼寫法五中的第乙個->不能省略?

其實很簡單,如果省略了第乙個->,那麼就變成了$array_ref[0][1],此時perl就會把array_ref誤認為是陣列。

可以說第乙個->是perl區分陣列和陣列引用的辨別標準:

$array[0][1]               無->,因此array是陣列

$array->[0][1]           有->,因此array是陣列的引用

那麼可能又會有人質疑, $array_ref->[0] == /@array1,也是引用啊,為什麼可以省略第二個->,而把

$array_ref->[0]->[1] 寫成$array_ref->[0][1]呢?

這樣的話,如何能區分$array_ref->[0]是陣列還是引用呢?

呵呵,原因就在於perl中的陣列中是不包含陣列的,因此如果你看到有兩個,那麼第乙個方括號一定是乙個引用。

總結如下: 第乙個方括號之前可以是陣列也可以是引用

$array[0]              array是陣列

$array->[0]           array是陣列的引用

第乙個方括號之後的任意乙個元素都是乙個引用(當然最後乙個方括號所代表的元素未必是)

例如:$array->[0][3][1][5]中

$array->[0],$array->[0][3],$array->[0][3][1]都是引用。

PERL 引用與解引用

perl 語言中的引用類似於c c 中的指標。標量 scalar 列表 list 雜湊 hash 函式 sub 檔案控制代碼 handle 都可以使用引用來標記。引用本身又是乙個標量。scal ref scal 標量引用 arr ref arr 列表引用 hash ref hashe 雜湊引用 ha...

Perl 引用(即指標) 學習筆記

前言 perl引用就是指標,可以指向變數 陣列 雜湊表 也叫關聯陣列 甚至子程式。pascal或c程式設計師應該對引用 即指標 的概念很熟悉,引用就是某值的位址,對其的使用則取決於程式設計師和語言的規定。在perl中,可以把引用稱為指標,二者是通用的,無差別的。引用在建立複雜資料方面十分有用。下面的...

Perl學習筆記 二 引用

perl學習筆記之perl的引用 首先,應該明確所有的引用都是用標量來表示的.對於標量引用陣列採用 ref 對 標量引用雜湊採用 ref 1 對陣列的引用,採用 符號.舉例 1 對變數的引用 my lines qw a b c my ref lines print 引用整個陣列 print 0 引用...