perl中->和=>作用

來源:互聯網
上載者:User

標籤:

-> 用法

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

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

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

->[] 表示解數組引用,->{} 表示解散列引用,->() 表示解子程式引用。

例子:

$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中->和=>作用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.