標籤:
-> 用法
-> 有兩種用法,都和解引用有關。
第一種用法,就是解引用。
根據 -> 後面跟的符號的不同,解不同類型的引用,
->[] 表示解數組引用,->{} 表示解散列引用,->() 表示解子程式引用。
例子:
$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();
或者
ClassName->method();
例如:
$pop3->login( $username, $password );
my $ftp = Net::FTP->new("some.host.name", Debug => 0);
這兩種用法略有不同,
但是總的來說,符合以下規則:
引用:[color=red]假設 -> 的左運算元(就是左邊那個值,如 $pop3 和 Net::FTP)是 $left,右運算元(就是右邊那個值,如 login 和 new)是 $right,那麼 -> 的運算規則就是:
if ( ref $left 有效 ) { # 也就是說 \$left 是個引用,而不是個裸字
$ClassName = ref $left; # 取引用的類型,當作類名稱
}
else{
$ClassName = $left; # 直接把裸字當作類名稱
}
然後調用:
&{$ClassName::$right}( $left, 原參數列表 )
也就是說把類名稱和右運算元拼在一起,當作子程式名稱(注),並把左運算元當作第一個參數。
註:Perl 解譯器要做的工作其實要比這複雜,它還要考慮到繼承的問題。
=>作用
當給 hash 賦值時,有時並不明顯哪些元素是 keys,那些是 values。例如,在下面的賦值中,我們需要仔細的計數,“ key,value,key,value,…” ,來判斷2.5 是key 還是 vlaue:
%some_hash = ( “ foo” , 35, “ bar” , 12.4 ,2.5, “ hello” , “Wilma” , 1.72e30, “ betty” , “ bye/n” );
如果 Perl 能提供一種方法,讓我們輕易的辨別出哪一個是 key,哪一個是 value,那該有多好?Larry 也想過這個問題,因此發明了大箭頭符號(=>)◆。對於 Perl 來講,其作用和和逗號(,)類似,因此有時稱作 “ 胖逗號(fat comma)” 。Perl 文法中,在需要逗號(,)的時候,都可以使用大箭頭符號替換;對於 Perl來講,它們是一樣的◆。下面是給 hash 賦值的另一種方法:
◆是的,還有小箭頭(->)。它和引用一起使用,這是進階話題。如果你準備好了,可以參見perlreftut 和perlref 的協助手冊
◆它們在技術上還是有一點不同:任何大箭頭符號(=>)左側的 bareword(由字母,數字,底線,但不是由數字開頭,前面有可選的加號或減號, 組成的序列)都暗含著由引號括起來了的。因此可以省略掉大箭頭符號(=>)左側bareword上的引號。你也可以忽略掉hash的花括弧中的引號,如果裡面只有作為key的bareword.
my %last_name = (
“fred” => “flintstone”,
“dino” => undef,
“barney”=> “rubble”;
“betty”=> “rubble”,
);
上面代碼中,很容易辨別出哪一個是 key,哪一個是 value。注意列表中最後一個逗號。我們早期討論過,這個逗號是沒什麼用的,但有時能給我們帶來方便;如果我們要加入新的元素到 hash 中,我們只需知道每一行都有 key/value 對,結尾有逗號。Perl 會查看不同元素之間的逗號,以及列表結尾處的逗號(此逗號非必需的)
原文連結:http://blog.sina.com.cn/s/blog_5f8e03960100x0si.html
perl中->和=>作用