perl的引用和->

來源:互聯網
上載者:User

常見資料類型的引用定義:

資料類型           定義      舉例

標量變數           \$Var                              $Pointer  =  \$Var

數組                 \@Array                          $Pointer  =  \@Array

雜湊變數           \%Hash                           $Pointer  =  \%Hash

檔案控制代碼           \*FILEHANDLE                $Pointer  =  \

常量                 \常量                               $Pointer  =  \3.1415926

子程式              \&SubRoutine                  $Pointer  =  \&SubRoutine

匿名數組            [ LIST ]                            $Pointer  =  [ “Smith”,“Jack”,“Jimmy”,“ZhaZha”]

匿名雜湊變數     { Key=>Value }                $Pointer  = { Key1=>Value1,Key2=>Value2}

匿名子程式        sub {}                               $Pointer  =  sub { printf( “Hello,Perl World\n”);}

對象引用           bless  $self;

 

翻譯自:
http://www.thegeekstuff.com/2010/06/perl-array-reference-examples/
http://www.thegeekstuff.com/2010/06/perl-hash-reference/

reference是另一個變數的地址。reference可以指向array,hash,或perl程式碼片段。reference使perl代碼運行更快。

一 array的reference和dereference

 

1)array的reference
正常地,我們儲存list的元素在array中如下:@array =  (“one”,”two”,”three”,”four”,”five”);
使用\來將array的地址賦給reference變數,如下:$array_ref = \@array;
如果你print $array_ref,將顯示如下:ARRAY(0x1a2b3c);
array的reference可以被傳遞給subroutine,如下:
sub add_numbers
{
  my $array_ref =  shift;
  .....
}  

@numbers = (11,2,3,45);

$array_ref = add_numbers(\@numbers);
在以上的代碼中,我們需要對array的reference進行dereference,然後才可以使用array中的元素。

下面是傳遞array的reference到subroutine的優點:
* 如果array傳遞給subroutine,perl將整個array重新copy到@_中,當array比較大時,這將非常的低效。
* 當我們需要在subroutine中修改原來的array的時候,我們需要傳遞array的reference。
* reference其實是構造複雜資料結構的本質。

我們也可以將匿名的array賦給reference如下:$array_ref = [ 11,2,3,45]

2)array的reference的dereference
在subroutine中,我們可以使用如下的方法來dereference array的reference:@{ $array_ref };
取得第一個元素如下:$ { $array_ref }[0];
或者可以使用perl的特殊符號來使用array的reference,如下:
# Get all the elements of @numbers array.
@ { $_[0] }

# Get a particular element. This gives the first element of the array.
$ { $_[0] } [0]

注意,如果只是dereference一個簡單的scalar變數,可以忽略括弧,如下:
@$array_ref  # same as @{ $array_ref }

$$array_ref  # same as $ { $array_ref }

$_[0]         # not a simple scalar variable and this cant be dereferenced,

二 hash的reference和dereference

hash的reference和dereference與array的一樣。

hash的reference如下:
%author = (
'name'              => "Harsha",
'designation'      => "Manager"
);

$hash_ref = \%author;

dereference後訪問元素如下:
$name = $ { $hash_ref} { name }; 等價於 my $name =  $hash_ref->{name};

訪問所有的keys如下:
my @keys = keys % { $hash_ref }; 等價於my @keys = keys %author;

如果是簡單scalar變數,可以忽略括弧,如下:my @keys =  keys  %$hash_ref; $name = $$hash_ref{name};

匿名hash的reference如下:
my $hash_ref  =  {
'name'               => "Harsha",
'designation'       => "Manager"
};

使用如下:$name = $ { $hash_ref} { name };

三 對reference變數使用-> 來獲得屬性

my $name =  $hash_ref->{name};

完!

 

 

相關文章

聯繫我們

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