[Perl系列—] 2. Perl 中的引用用法

來源:互聯網
上載者:User

標籤:style   class   blog   code   color   get   

Perl 中的引用,為什麼要使用引用?

對於熟悉C語言的開發人員來說, 指標這個概念一定不陌生。

Perl 的引用就是指標,可以指向變數、數組、雜湊表甚至子程式。

Perl5中的兩種Perl參考型別為硬Perl引用和符號Perl引用。符號Perl引用含有變數的名字,它對運行時建立變數名並定位很有用,基本上,符號Perl引用就象檔案名稱或UNIX系統中的軟連結。而硬Perl引用則象檔案系統中的永久連結。

Perl4隻允許符號Perl引用,給使用造成一些困難。例如,只允許通過名字對包的符號名雜湊表(名為_main{})建立索引。Perl5則允許資料的硬Perl引用,方便多了。
硬Perl引用跟蹤Perl引用的計數,當其數為零時,Perl自動將被Perl引用的項目釋放,如果該項目是對象,則析構釋放到記憶體池中。Perl本身就是個物件導向的語言,因為Perl中的任何東西都是對象,包和模組使得對象更便於使用。


那在什麼狀況下會使用到引用呢?

在perl4中,hash表中的value欄位只能是scalar,而不能是list,這對於有些情況是很不方便的,比如有下面的資料:

Chicago, USA
Frankfurt, Germany
Berlin, Germany
Washington, USA
Helsinki, Finland
New York, USA

我們想要按國家將城市分類,每個國家後面對應城市列表,如果用perl4來做,必須將城市列表組合成字串才行,如果用perl5就可以用引用來做,有了引用,就可以構造複雜的hash結構,就可以用列表作為hash的值了。


定義引用

知道了引用的作用,那麼如何來定義一個引用呢?

方法1: 使用斜線  \

在變數前面加上一個 \

對於陣列變數的引用:

my @array = (1,2,3);my $arrayref = \@array;

對於雜湊變數的引用

my %hash = ("name"=>"oscar999","age"=>30);my $hashref = \%hash;

對於標量的引用

my $scarlar = 1;my $scarlarfef = \$scarlar;

方法2. 匿名引用  []  或 {}

匿名引用就是不定義變數,

對於匿名數組來說,直接用中括弧 [] 來定義引用

my $arrayref = [1,2,3];
以上就是定義一個匿名數組。

使用這種方式也可以在匿名數組中套匿名數組

my $arrayref = [        [1, 2, 3],        [4, 5, 6],        [7, 8, 9]];

匿名雜湊引用用 {} 定義

my $href = {US=>4,CN=>6};


使用引用

定義了引用, 如何使用呢?

方法1:  與普通變數訪問相比, 多加一個 $

這個概念和C 和類似

#定義變數my $scalar = 1 ;my @array = (1, 2, 3) ;my %hash = ("name"=>"oscar999","age"=>30);#定義引用my $sref = \$scalar ;   # scalar referencemy $aref = \@array ;    # array referencemy $href = \%hash ;     # hash reference#使用引用print $$sref, "\n" ;  print @$aref, "\n" ;  print %$href, "\n" ;  print $$aref[2], "\n" ;print $$href{‘name‘}, "\n" ;

方法2  與普通變數訪問相比, 多加一個 $

數組的使用:

   @a        @{$aref}         An array   [email protected]      reverse @{$aref}    Reverse the array   $a[3]      ${$aref}[3]       An element of the array   $a[3] =17;      ${$aref}[3] =17    Assigning an element

雜湊的使用:

   %h          %{$href}           A hash   keys%h        keys%{$href}        Get the keys from the hash   $h{‘red‘}       ${$href}{‘red‘}       An element of the hash   $h{‘red‘} =17      ${$href}{‘red‘} =17    Assigning an element

注意:當{}內部是$var的形式時,{}是可以省略的,也就是說@{$aref}等價於@$aref,不過最好是加上{}。


方法3: 使用箭頭符號 -> 這種用法看起來比較簡潔

$aref->[]  數組解引用

$href->{}  雜湊解引用

$href->()  子過程解引用

看看例子:

$aref->[0] =3 ; $href->{name} ="autumn" ; 




前言
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.