Perl 基本備忘錄

來源:互聯網
上載者:User

  1.Perl數組(1):

    1) 初始化數組 @array = ( "stringA" , "stringB" , "stringC" );

    2) 使用負索引迴圈檢索 print $array[-1];  #輸出索引為(-1 + 3) % 3 = 2 的 stringC

    3) 動態增長 $array[4] = "stringD"; #雖然$array[3]還沒有使用,但在動態賦值$array[4]的使用,已經對$array[3]賦空置

    4) 動態增長後的負索引 print $array[-1]; #輸出索引為(-1 + 5) % 5 = 4 的 stringD

    5) print @array; #輸出數組中所有值的無空格串接

    6) print "@array"; #輸出數組中所有值的空格分隔列表

   2.Perl數組(2):

    1) 數組中可以儲存不同類型的資料(字串、數值、數組)

    2) $size = @array; 該語句把數組@array的數組長度值給標量$size,但如果在某些函數中直接使用@array,將不一定能得到數組長度

    3) $#arrayname,該特殊變數儲存著名為arrayname的數組的末尾索引值。

      例如:  @arr = ( 1,2,3,4,5 );

           則$#arr的值為4

           $#arr=2;  這樣就把數組arr截斷,其元素4和5都被釋放,數組長度值也被改變

    4) @array[-1,4,7] 將分別輸出索引值為-1,4,7的元素,這樣的調用傳回值不是標量,而是數組

    5) 多維陣列使用多層方括弧定義

        @D3array = (

                [ [1,2,3,4] , [5,6,7] , [8,9,0] ],

                [ [ 'str1' , 'str2' , 'str3' ] , [345 , 67 , 8930] ],

                [ [ 4,6,7] , [2] , [ "sud" ] ]

               );

      多維陣列中每維的數組長度不需要一致,內部資料元素也不需要一致。

      擷取第一維的數組長度方式是 $size = @array;

        第二維         $size = @{$array[$i]};

        第三維         $size = @{$array[$i][$j]};

        .......         ......

        關鍵是,只要@符號後跟一個陣列變數時,就可以擷取其長度,但超過一維時,擷取陣列變數的運算式要用{}包住

  3.命令列執行Perl語句

     1)perl -e '命令語句'   這樣可以直接在命令列執行Perl語句,不過要注意引號匹配規則。

     2)perl -ne '命令語句'  filename 這樣可以逐行讀入filename中的資料,然後對每行都以命令語句處理。

        例如 a) perl -ne 'print;'  abc.txt

              在命令列介面逐行輸出abc.txt檔案的資料

           b) perl -ne 'print if /^192/ ' /etc/hosts > ~/hosts.tmp

            把UNIX like系統中主機解釋檔案的內容逐條寫到~/hosts.tmp檔案下,不過只有符合以192開頭的行,才會被寫入,因為語句會執行篩選

      3)'OS命令' | perl -ne '命令語句'  這樣可以把之前執行的OS命令的輸出作為輸入資料流,重新導向到後面執行的perl命令中。

        例如 a) ls -al | perl -ne 'print;'

            把目前的目錄下所有子檔案、子目錄列出,並作為輸入資料輸入到perl命令中,再逐條列印

  4.Perl引號規則

    1)雙引號中的內容允許轉義和變數解析,縮寫是qq/內容/

    2)單引號中的任何字元都不會被轉義和變數不會被解析,縮寫是q/內容/

    3)反引號中的內容如果出現OS命令,該命令會被執行,並且結果數組會替換命令位置,或作為賦值的資料,縮寫是qx/內容/

    4)上述縮寫中,符號對/內容/可以用其他符號替代,效果相同,例如qq(內容),qx!內容!,q+內容+等等,但字母好像不可以

  5.here文檔規則

    1)起始標籤沒有使用任何引號。對文檔內容的效果等同於使用了雙引號。

    2)起始標籤使用了單引號。對文檔內容的效果等同於使用了單引號。

    3)起始標籤使用了反引號。對文檔內容的效果等同於使用了反引號。

  6.變數初始化

    Perl中的變數在第一次出現時被分配記憶體。如果沒有顯式初始化,則會被賦值為0或者Null 字元串,具體怎樣表現要視乎該變數出現的上下文。

    使用defined函數,defined $var 可以檢查變數是否已經被初始化。

    使用undef函數,undef $var 可以釋放變數的內容。

  7.特殊變數

    1)$_, 該變數的值經常作為預設參數值,例如這樣調用 print; 不給予任何參數,則會列印出$_的值;當使用檔案控制代碼讀入資料時,若不指定使用什麼變數儲存讀入資料,也會讀        入到$_中。

  8.Hash

    1)Hash表定義文法:

        %aHash = (

                'key1'  => "value1",

                "key2" => 'value2',

                "key3" => 123,

                456 => "890"

               ) ;

    2)Hash表中的索引值可以是數字、字串、數組甚至另一個hash表,不過如果要採用非字串索引值,則最好以單個鍵/值對賦值的形式插入到hash表中,而不是在初始化時插入。

    3)對1)中的hash表,可以使用以下操作使用hash slice:

        a) @aValues = qw ( 123 456 789 0 );

            @aHash{'newKey1' , 'newKey2' , 'newKey3' , 'newKey4'} = @aValues;

            通過這樣的方式,可以建立新的hash表,如果名字相同(除了起始的%變為@),則會在原有的hash表中插入,而非建立。

        b)對3)中修改後的aHash,可以採用以下方式擷取其值集合的子集:

          @subSet = @aHash{ 'newKey1' , 'key1' , 456 };

          @subSet數組中儲存元素的順序為賦值時指定鍵的順序。

      其中 @hash表名 這種使用方式,稱為hash slice。

  9.數組HASH嵌套

    %aHash = (

            "key1" => "value1",

            "key2" => [

              "str1",

              [ 1,2,3,4,5 ],

              {

                "key2.1" => "value2.1";

                "key2.2" => "value2.2";

              } 

            ],

            "key3" => {

              "key3.1" => "value3.1",

              "key3.2" => "value3.2",

            },

           );

    print "$aHash{'key2'}->[1][3]\n" ; 輸出4

    print "$aHash{'key2'}->[2]->{'key2.1'}\n"; 輸出value2.1

    print "$aHash{'key3'}->{'key3.2'}\n"; 輸出value3.2

    上述調用中->符號可以省略。

  10.操作符上下文

    1)當操作符的上下文是數值時,運算元中的開頭空格會被跳過,直接找到運算元中第一個數字,而隨後的字串也會被跳過。若運算元的起始字串不是空格也不是數字,則該操       作數被解析為0。一個例外是當運算元的形式為科學記數格式時,會被作為一個整體解釋。

      $str1 = "  5  594asd";

      $str2 = "10";

      $str3 = "asd 10";

      $str4 = "  4e3 asiddfi";

      $sum = $str1 + $str2 + $str3 + $str4;  # $sum的值為4015 , 5 + 10 + 0 + 4000

    2)當操作符的上下文是字串時,所有運算元都被解析成字串。

  11.邏輯操作符解析

    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.