perl 入門介紹(2)

來源:互聯網
上載者:User

 前面一節介紹了Perl中的基礎資料型別 (Elementary Data Type)及其使用方式,本節介紹一下分支迴圈控制及IO。

 

 Perl中的分支迴圈在文法上和C家庭語言的文法很相似,關鍵字包括: If / else, for ,while 。

 前面已經講過,Perl中代碼塊用大括弧{}圍起來,運算式以分號結尾,這些都和C相似,

 但在Perl中,使用if for while時,大括弧是強制要求的,這點與c不一樣。

 

 細心的人可能會發現前一節講資料類型的時候,並沒有涉及到整形,浮點,bool什麼的,

 只說到了一個標量,事實上在Perl裡,這些基礎資料型別 (Elementary Data Type)並不嚴格區分,都可以歸到Scalar裡頭去,

 這也大概算是指令碼語言的一個通用做法, 弱化了基本類型。

 

  其它先不提,分支迴圈在很多語言裡有一個很關鍵資料:bool。

  控制分支走向需要一個判斷點,真要怎樣做,假要怎樣做,但在Perl裡,沒有一個具體的true,false類型,

  所以在做真假判斷時,遵循以下原則:

     如果是資料類型,0則為假,

     如果是字串,Null 字元串為假。

     如果是集合,空集合為假。

  這些都比較好理解。

 

(一)if / else

     Perl中的if/else文法上和c語言一致,除了要求一定要有大括弧。

     邏輯判斷操作: 與(&&), 或(||),非(!) 文法上也很和C是一致的。

     $str = "abc";

     @arr = (2,3,4);

     if( $str && @arr == 3)

        {

        }

      else

        {

         }

      上面的例子是一種比較傳統老式的寫法,前面我說if / else 和C中的文法一致,其實也不大準確。

      Perl自己還提供了一套與C不大一樣的寫法,風格上更像是自然語言一樣。

       

      $var = 2;

      Print " hello world" if ($var > 0); #注意這行,等價於:   if ($var > 0) { print "hello world";}

 

      這種寫法就像是自然語言裡的倒序了。

      像上面這種寫法,還有另外一個關鍵字也是同樣適用的: unless

      Print " hello world" unless ($var > 0);

 

  (二)迴圈: for / while / foreach

     

           for ($i=0; $i<100; $i++)

       { 
          print "hello $i \n";
       }

         

            while( $i < 100 )

             {

                   print "hello $i \n";

                    $i++;

              }

 

            上面兩字例子示範了 for / while的寫法,可見是和C 在文法上是一樣的。

            除了for / while ,Perl還提供了一個 foreach 專門用來處理數組。

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

            foreach $item (@arr)

            {

                print "item: $item\n";

           }

           注意foreach 那一行中的小括弧是不能省的。

 

    (三)I/O

         Perl中進行I/O操作延用了unix中的IO概念,一切都抽象成檔案。

         所以,I/O操作都是對一個檔案控制代碼(file handle)進行操作,包括標準輸入標準輸出。

         

         (1)標準輸入,標準輸出。

 

         前面範例程式碼中多次用到了print,在之前的寫法這是標準輸出,但它的功能卻不僅限於標準輸出,事實上它的準確原型是:

         print <file handle> "hello world\n";

         如果省略了 file handle,預設情況下就是標準輸出,標準輸出的控制代碼 <STDOUT>

         所以前面的print語句,事實上等價於:

         print STDOUT "hello world\n";

         對應的標準輸入是STDIN, 這個兩個變數是Perl預定義的。

         可以看成是一個關鍵字一樣,也不需要在這些變數前面加$,@這類的符號 。

         前面一直只樣本了標準輸出,沒有提過標準輸入。

         標準輸入文法上,也很簡潔:

         $line = <STDIN>; #read 

         用角括弧把檔案控制代碼括起來,就相當於從裡面讀資料。

 

         (2)檔案I/O

 

             擷取及關閉檔案要用Open()/Close()函數。

             $succ=  open(fh,“~/myfile.log”);

              if($succ)

                {

                    $line = <fh>;#read one line.

                    @all = <fh>;  #read the whole file.

                    print "@line \n";

                    close(fh);

                 }

 

         值得注意的是,檔案控制代碼的聲明是可以不用加$這種符號,直接寫一個名字就夠了,當然,你如果喜歡加上$,也是沒問題的。

         前面的樣本示範了讀入時的最基本的做法,Perl還提供了和C語言裡類似的檔案操作函數:seek, tell,

         用來定位到檔案的相應位置進行讀寫。

         它們的用法和c語言很相似,具體使用方式,有興趣的讀者可以自己去查閱一下官方文檔。

         前面的open()函數樣本了檔案開啟的最基本形式,事實上,這個函數l還支援設定訪問模式。

         檔案訪問模式:

         訪問模式                         例子                                                  說明

         讀(Read)                        open(FH,"< FileName");                從檔案中讀取

         寫(Write)                        open(FH,"> FileName");                向檔案中寫入,覆蓋舊檔案中的內容

         追加(Append)                 open(FH,">> FileName");              向現有檔案的尾部追加資料

         讀寫(Read and Write)     open(FH,"+< FileName");               讀取和寫入現有檔案

         寫入程式                        open(PIPEOUT,"| pipeout");            開啟程式管道

         讀取程式                        open(PIPEIN,"pipein |");                  從程式或命令的輸出中取得資料

        

        如果開啟的檔案支援寫操作,我們就可以用Print 函數往檔案裡寫東西:

        if(open(fh,">~/file.log"))

         {

                print fh "hello file\n";

                close(fh);

         }

         

          

 

相關文章

聯繫我們

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