http://blog.csdn.net/u013816205/article/details/51068595
-> 有兩種用法,都和解引用有關。
第一種用法,就是解引用。
根據 -> 后面跟的符號的不同,解不同類型的引用,
->[] 表示解數組引用,->{} 表示解散列引用,->() 表示解子程序引用。
例子:
$arr_ref = \@array;
$arr_ref->[0] 訪問數組 @array 的第一個元素。
$hash_ref = \%hash;
$hash_ref->{foo} 訪問 %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 有效 ){ # 也就是說 $left 是個引用,而不是個裸字 $ClassName = ref $left; # 取引用的類型,當作類名稱 } else{ $ClassName = $left; # 直接把裸字當作類名稱 }
然后調用:
&{$ClassName::$right}( $left, 原參數列表 )
也就是說把類名稱和右操作數拼在一起,當作子程序名稱(Perl 解釋器要做的工作其實要比這復雜,它還要考慮到繼承的問題),並把左操作數當作第一個參數。
附加:perl中的“指針”。箭頭不是指針!!
引自:Perl語言中的“指針”用法解析_架構設計_技術方案_中國軟件網 http://tech.soft6.com/664/8/35840.html
在C語言中,指針(地址)的使用給我們帶來了很大的方便,但是在Perl語言中沒有直接提供這樣的數據類型,在某些情況下就存在一些很不方便的地方。
在調用函數時,如果參數值和返回值比較多,而且非常復雜的時候,僅僅是參數棧或返回值棧是不夠用的。這時候,有兩種解決方法,一種是使用引用調用,這樣可以傳遞象數組、哈希數組一類的數據,另外一種就是我要着重介紹的“指針”,主要用來傳遞復雜的結構,例如多維數組。多維數組指針的創建
Perl語言中多維數組指針的創建非常簡單,具體語句如下:
my$multi_array=[];
這時,$multi-array就是一個指針,它的內容是undefined.下一步我們要給它賦值,語句如下:
@{$multi_array}=((a,...,z),(1,...,10),($a,...,$xx));
這時,$multi-array就成了一個指向二維數組的指針,當然,如果必要的話,你可以定義更多的維數。如何使用這個二維數組的元素呢?
$multi_array->[0][1]#數組第一維,第二個元素
如何使用一行元素呢?
@{$multi_array->[0]}#二維數組的第一行元素
這樣,你就可以方便的借助指針使用多維數組了。標量$multi_array就象一個普通的標量,在函數調用和返回時,就可以直接使用了。