Perlの制御文

  1. 論理式

    1. 論理式

      数値の比較には次の演算を利用します。
       ==, !=     #等しい、等しくない
       >,>=,<,<=   #大小比較
      文字列の比較には、次の記号演算子を利用します。
           eq,ne    #等しい、等しくない
       lt,le,gt,ge  #小さい、以下、大きい、以上
       cmp    #比較し、小さい、同じ、大きい、とき、-1,0,1 を返す
      文字列の比較には、他に正規表現に基づくパターンマッチがあります。マッチに成功すると真になります。
           =~   #パターンマッチ

    2. 論理演算

      Perlでは、0やnull(空文字など)をFALE、それ以外をTUREとして扱います。論理値間の演算として、論理和、論理積、排他的論理和、否定が利用できます。
       & , |, ^  #論理和、論理積、排他的論理和
       &&,||  #短絡論理演算と呼ばれ、途中で真偽が確定すると、それ以後の評価を省略します。
      ビット毎の、論理演算は、and,or,exor,not 演算子を利用します。

  2. if、else

    1. 形式

      条件付の実行を制御します。perlには elsif のキーワードがあります。
       if (条件) {<文1>;}
       elsif (条件) {<文2>;}
        elsif (条件) {<文3>;}
       else {<文4>;}
      言語Cと異なり、{..}は必須ですから、注意してください。

    2. 例:キーボードからの入力
       以下の例は、キーボード:標準入力(STDIN)から一行入力し、chopで最後の改行文字を削除し、それが Itoh なら、Aya をそれ以外なら Taro を出力します。eq は一致演算で ne が不一致演算です。

      例 name.pl
          print "your name?\n";
          $name=<STDIN>;
          chop($name);
          if ($name eq "Itoh"){
           print " Aya\n";}
          else{
           print "Taro\n";}
      Cのswitchに対応する構文はありません。
    3. 式修飾

      特別な記法として、1文からなる処理の条件を、後から指定することもできます。
           print " Hello World !! " if  $a == 1 ;

  3. while文  

    1. 形式

      while(...){..}は、(...)が真のあいだ{...}を繰り返します。

    2. 例1 

      1から9まで表示します。
      $i = 1; 
      while ($i < 10) {
        print "i = $i\n";
        $i++; 
      }
    3. 例2

      @name_listで文字配列を定義し、文字列を記録します。各文字列は $namelist[$i] で参照できます。$i は繰り返し回数を記録する変数で、3になるまで名前を順に表示します。


      @name_list=("Aya","Yumi","Tae");
      $i=0;
      while($i != 3){
       print "$namelist[$i]\n";
       $i++;
      }

    4. 例3

      少し、Perl的なプログラムを紹介します。リストには項目の名前と価格があります。このペアを表示し、価格の合計を計算します。データを取り出しにshiftを利用し、データが空になると、shiftの値がnull(空)になり、繰り返しが終了します。
        #while
        @list=("pen",12,"eraser",7,"tape",10,"clip",7);
        $total=0;
        while($st=shift(@list)){
          $price=shift(@list);
          print "item=$st:price=$price\n";
          $total += $price;
        }
        print "total=$total\n"
      実行結果
      item=pen:price=12
      item=eraser:price=7
      item=tape:price=10
      item=clip:price=7
      total=36

  4. for文

    1. 形式

      for ( <初期値> ; <終了条件> ; <増分> ) { 文 }
      言語Cと同じ構文です。

    2.  

      for ($i = 1; $i <= 10; $i++) { print "i = $i\n"; }

  5. foreach文

    1. 形式

      foreach <スカラ変数> ( <リスト値> ){ 文 }
      配列の各要素に繰返し処理を行います。

    2. リストの要素を順にたどるには、foreach()文が簡明です。$val は任意の変数名です。
        #foreach
        @list=("pen","eraser","tape","clip");
        foreach $val(@list){
          print "$val\n";
        }
  6. その他

    1. last,

      C言語のbreak、と同じ意味です。
      while ( 1 ) {
      if ( $a == 1 ) { last ; }
      }

    2. next 

       C言語のcontinue、と同じ意味です。

    3. exit()    

       実行を終了します。