Perl中 箭頭的意義及用法

2021-07-10 23:52:29 字數 1738 閱讀 4881

看師兄的程式,裡面用了很多箭頭->。很長時間沒有使用perl程式設計了,很多基本概念忘記了。在網上搜了很久,終於找到比較靠譜的答案。

cited from 

flw的回答。有部分增改。

-> 有兩種用法,都和解引用有關。 

第一種用法,就是解引用。 

根據 -> 後面跟的符號的不同,解不同型別的引用, 

-> 表示解陣列引用,->{} 表示解雜湊引用,->() 表示解子程式引用。 

例子: 

$arr_ref = \@array; 

$arr_ref->[0] 訪問陣列 @array 的第乙個元素。 

$hash_ref = \%hash; 

$hash_ref-> 訪問 %hash 的 foo 分量 

$sub_ref = \&test; 

$sub_ref->(1, 2, 3) 使用引數列表 (1,2,3) 來呼叫 &test 這個子程式。 

第二種用法,就是呼叫類或者物件的方法。 

格式: 

$obj->method(); ##簡單來說,就是函式表示的一種。等價於method($obj)

或者 classname->method(); 

例如: 

$pop3->login( $username, $password ); 

my $ftp = net::ftp->new("some.host.name", debug => 0); 

這兩種用法略有不同, 

但是總的來說,符合以下規則: 

引用:假設 -> 的左運算元(就是左邊那個值,如 $pop3 和 net::ftp)是 $left,右運算元(就是右邊那個值,如 login 和 new)是 $right,那麼 -> 的運算規則就是: 

if ( ref $left 有效 )

else

然後呼叫: 

&( $left, 原引數列表 ) 

也就是說把類名稱和右運算元拼在一起,當作子程式名稱(perl 直譯器要做的工作其實要比這複雜,它還要考慮到繼承的問題),並把左運算元當作第乙個引數。 

附加:perl中的「指標」。箭頭不是指標!!

引自:perl語言中的「指標」用法解析_架構設計_技術方案_中國軟體網  

在c語言中,指標(位址)的使用給我們帶來了很大的方便,但是在perl語言中沒有直接提供這樣的資料型別,在某些情況下就存在一些很不方便的地方。

在呼叫函式時,如果引數值和返回值比較多,而且非常複雜的時候,僅僅是引數棧或返回值棧是不夠用的。這時候,有兩種解決方法,一種是使用引用呼叫,這樣可以傳遞象陣列、雜湊陣列一類的資料,另外一種就是我要著重介紹的「指標」,主要用來傳遞複雜的結構,例如多維陣列。多維陣列指標的建立

perl語言中多維陣列指標的建立非常簡單,具體語句如下:

my$multi_array=;

這時,$multi-array就是乙個指標,它的內容是undefined.下一步我們要給它賦值,語句如下:

@=((a,...,z),(1,...,10),($a,...,$xx));

這時,$multi-array就成了乙個指向二維陣列的指標,當然,如果必要的話,你可以定義更多的維數。如何使用這個二維陣列的元素呢?

$multi_array->[0][1]#陣列第一維,第二個元素

如何使用一行元素呢?

@#二維陣列的第一行元素

這樣,你就可以方便的借助指標使用多維陣列了。標量$multi_array就象乙個普通的標量,在函式呼叫和返回時,就可以直接使用了。

C 中箭頭「 」和「 」的區別

對於乙個結構 struct mystruct 如果有個變數mystruct s,那麼使用其中的成員元素時可以用 s.member a 1 如果採用指標方法訪問,比如mystruct ptrs,那麼同樣的訪問就必須使用如下形式 ptrs member a 1 或者ptrs member a 1 也需要...

C 中箭頭運算子的含義與用法講解

c 中箭頭運算子 相當於把解引用和成員訪問符兩個操作符結合在一起,換句話說,p func 和 p func 所表示的意思一樣。例如 class a class b 理解就是,的功能就是提供了一種物件指標更方便的訪問對程式設計客棧象成員的方法。運算子 是指向結構體成員運算子,結合方向為自左向右。舉例說...

explicit的用法及意義

c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class myclas...