乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      如何理解Perl語言中的Glob

       閑來看看 2011-09-15
      如何理解Perl語言中的Glob

       

      本文假設(shè)你對Perl引用已經(jīng)有所了解。

      關(guān)于Perl glob,筆者建議閱讀《Advanced Perl Programming》第一版的第三章和第二版的第一章。本文是筆者經(jīng)過閱讀以上內(nèi)容并經(jīng)過一些實(shí)踐后完成的。

      我們都知道Perl的引用類似C語言的指針。

      C指針:
      int a = 1;
      int* pa;
      pa = &a;
      
      Perl引用:
      my $a = 3;
      my $ra = \$a;
      

      引用都可以簡單地看成是存儲了變量的地址:

      $a $ra
      3 變量$a的地址

      在各種語言里,都有符號表(Symbol Table)的概念。符號表存儲著各種作用域里的符號(Symbol)。這里說的Symbol是指我們編程時(shí)用到的各種名稱,包括變量名、函數(shù)名等。比如上面的“a”、“pa”、“ra”等都是symbol??聪旅娴拇a:

      my $a = "sdd";
      my $b = 34;
      my @b = (2,3);
      my %b = (name => 'me', age => 28);
      sub b {
      print "hello\n";
      }
      

      產(chǎn)生的符號表:

      ... ...
      symbol a 變量$a的地址
      ... ...
      symbol b $b的地址 @b的地址 %b的地址 函數(shù)b的地址
      ... ...

      可以看到symbol b里存放了好幾個變量和函數(shù)的引用。在Perl里,symbol也可以被叫做glob。symbol b和symbal a可以分別用*b和*a表示。

      glob的一個基本應(yīng)用是alias(別名):

      $a = 10;
      *b = *a;
      print $b . "\n";
      $b = 20;
      print $a . "\n";
      

      運(yùn)行結(jié)果:

      10
      20
      

      符號表:

      ... ...
      *a \$a
      ... ...
      *b \$a
      ... ...

      通過將引用賦給glob可以實(shí)現(xiàn)部分別名:

      $a = 6;
      @a = (1,2);
      @b = (5,6);
      print $a . "\n";
      *b = \$a;
      $b = 7;
      print $a . "\n";
      

      輸出:

      6
      7
      

      符號表:

      ... ...
      *a \$a \@a
      ... ...
      *b \$a \@b
      ... ...

      可以看到,只是標(biāo)量一樣了,數(shù)組還是各自的。

      還可以用于參數(shù)傳遞:

      sub change {
      *b = shift;
      $b = "cc";
      }
      $a = "tt";
      print $a . "\n";
      change(*a);
      print $a . "\n";
      

      運(yùn)行結(jié)果:

      tt
      cc

      據(jù)說通過glob傳遞參數(shù)要比傳引用快很多。

      不同的作用域有不同的符號表:函數(shù)擁有自己的符號表,各個包也有自己的符號表。注意!詞法變量(lexical variable,用my關(guān)鍵字聲明的變量)不收入符號表。同時(shí),也不能用my關(guān)鍵字來聲明glob。my關(guān)鍵字只用來聲明詞法變量,glob不是詞法變量。

      《Advance Perl Programming》第二版里說:可以把glob看成一個很有限的hash,他只有幾個key:SCALAR、ARRAY、HASH, IO, CODE, FORMAT和GLOB(筆者注:保存GLOB引用),另外還有兩個key:PACKAGE和NAME(筆者注:僅做自省用)。比如一個glob:a,*a{SCALAR}就相當(dāng)于\$a,*a{HASH}就相當(dāng)于\%a等等。

      $a = 234;
      print $a . "\n";
      ${*a{SCALAR}} = 345;
      print $a . "\n";
      

      輸出:

      234
      345

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多