2011-02-06 58 views

回答

28

參見The Arrow Operator在perlop得到:

->」 是一箇中綴引用操作,就像它是在C和C++。如果右側是[...]{...}(...)下標,則左側必須分別對數組,哈希或子例程使用硬引用或符號引用。 (或者從技術上講,如果它是一個數組或哈希引用被用於分配,則該位置能夠保存一個硬引用。)請參見perlreftutperlref

否則,右側是一個方法名稱或一個包含方法名稱或子例程引用的簡單標量變量,左側必須是對象(有福的引用)或類名(也就是說,一個包名稱)。見perlobj

+5

倒數第二行有點誤導。如果箭頭右側的標量是代碼ref,那麼左側是什麼都沒有關係。使用`my $ say_array = sub {print'@ {$ _ [0]} \ n「};`然後您可以寫出如[1,2,3] - > $ say_array;`這樣的行來打印`1 2 3 ` – 2011-02-06 17:28:43

3

@{}部分是反引用 - 這意味着$m->links參考到一個數組,所以該操作員deferences它來指直接陣列,然後將其複製到@top_links

第8章'Camel Book'是瞭解參考資料的好地方,或者Perl文檔的perlref部分。

->箭頭運算符是一個對象取消引用,在這種情況下獲取$m對象的links成員。同樣,駱駝書後面的章節詳細介紹了Perl的面向對象支持。另請參閱Perl文檔的perlobj部分。

12

一般而言,->暗示取消引用。此語法來自C.

在您的示例中,它表示來自$m中對象實例的方法調用:調用方法links。這在對象Modern Perl一章中有解釋。件數perlsubperlfaq7,perlobj,perltoot提供的細節。

一般的參考文獻,search Stack Overflow;這是一個反覆出現的話題。

0

Perl的箭頭操作符具有一個其他用途:

講座>方法調用子程序方法類,包

雖然它比您的代碼示例完全不同。只是爲了標題中的問題的完整性而包含它。

相關問題