Perl5中的引用和指標

來源:互聯網
上載者:User

標籤:

一、引用簡介

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

二、使用引用

  如果$pointer的值為一個數組的指標,則通過形式@$pointer來訪問數組中的元素。形式@$pointer的意義為“取出$pointer中的地址值當作數組使用”。類似的,%$pointer為指向雜湊表中第一個元素的引用。

三、使用反斜線(\)操作符

  反斜線操作符與C語言中傳遞地址的操作符&功能類似。一般是用\建立變數又一個新的引用。下面為建立簡單變數的引用的例子:
    $variavle = 22;
    $pointer = \$variable;
    $ice = "jello";
    $iceprt = \$ice;
    引用$pointer指向存有$variable值的位置,引用$iceptr指向"jello"。

四、引用和數組

  關於Perl語言應該記住的最重要的一點可能是:Perl中的數組和雜湊表始終是一維的。因此,數組和雜湊表只儲存標量值,不直接存貯數組或其它的複雜資料結構。數組的成員要麼是數(或字串)要麼是引用。
    對數組和雜湊表可以象對簡單變數一樣使用反斜線操作符,數組的引用如下:

1  #!/usr/bin/perl
2  #
3  # Using Array references
4  #
5  $pointer = \@ARGV;
6  printf "\n Pointer Address of ARGV = $pointer\n";
7  $i = scalar(@$pointer);
8  printf "\n Number of arguments : $i \n";
9  $i = 0;
10 foreach (@$pointer) {
11   printf "$i : $$pointer[$i++]; \n";
12 }

    運行結果如下:
  $ test 1 2 3 4 
  Pointer Address of ARGV = ARRAY(0x806c378)
  Number of arguments : 4
  0 : 1;
  1 : 2;
  2 : 3;
  3 : 4;

  第11行用形式$$pointer[$i]列出所有元素

  通過引用訪問雜湊表的元素形式為$$pointer{$index}

五、多維陣列

六、子程式引用

  perl中子程式的引用與C中函數的指標類似,構造方法如下:
     $pointer_to_sub = sub {... declaration of sub ...};
     通過所構造的引用調用子程式的方法為:
     &$pointer_to_sub(parameters);

七、數組與子程式

  

#!/usr/bin/perl
@names = (mickey, goofy, daffy );
@phones = (5551234, 5554321, 666 );
$i = 0;
sub listem {
  my ($a,$b) = @_;
  foreach (@$a) {
    print "a[$i] = " . @$a[$i] . " " . "\tb[$i] = " . @$b[$i] ."\n";
    $i++;
  }
}
&listem(\@names, \@phones);

    結果輸出如下:

a[0] = mickey     b[0] = 5551234a[1] = goofy      b[1] = 5554321a[2] = daffy      b[2] = 666

PS
1. 當想傳遞給子程式的參數是多於一個的數組時,一定要使用引用;
2. 一定不要在子程式中使用形如(@variable) = @_;的語句處理參數,除非你想要把所有參數集中到一個長的數組中。

八、檔案控制代碼的引用

有時,必須將同一資訊輸出到不同的檔案,例如,某程式可能在一個執行個體中輸出到螢幕,另一個輸出到印表機,再一個輸出到記錄檔案,甚至同時輸出到這三個檔案。相比較於每種處理寫一個單獨的語句,可以有更好的實現方式如下:
    spitOut(\*STDIN);
    spitOut(\*LPHANDLE);
    spitOut(\*LOGHANDLE);
    其中子程式spitOut的代碼如下:

sub spitOut {
  my $fh = shift;
  print $fh "Gee Wilbur, I like this lettuce\n";
}

    注意其中檔案控制代碼引用的文法為\*FILEHANDLE。

Perl5中的引用和指標

聯繫我們

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