perl 入門介紹(2)


前面一節介紹了Perl中的基本數據類型及其使用方式,本節介紹一下分支循環控制及IO。

Perl中的分支循環在語法上和C家庭語言的語法很相似,關鍵字包括: If / else, for ,while 。前面已經講過,Perl中代碼塊用大括號{}圍起來,表達式以分號結尾,這些都和C相似,但在Perl中,使用if for while時,大括號是強制要求的,這點與c不一樣。細心的人可能會發現前一節講數據類型的時候,並沒有涉及到整形,浮點,bool什么的,只說到了一個標量,事實上在Perl里,這些基本數據類型並不嚴格區分,都可以歸到Scalar里頭去,這也大概算是腳本語言的一個通用做法, 弱化了基本類型。

其它先不提,分支循環在很多語言里有一個很關鍵數據:bool。控制分支走向需要一個判斷點,真要怎樣做,假要怎樣做,但在Perl里,沒有一個具體的true,false類型,所以在做真假判斷時,遵循以下原則:

  •      如果是數據類型,0則為假,
  •      如果是字符串,空字符串為假。
  •      如果是集合,空集合為假。

這些都比較好理解。

 

(一) 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);

         }   

          

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM