第 4 回 - Perl 入門(2)

[10/18, 2009 H.Aman]
67x27(1669bytes)   67x27(1669bytes) 【課題 1】

例題 1

テキストファイルを入力とし,その中で "printf" という文字列が登場する行だけを表示するような Perl スクリプト find_printf.pl を作りなさい. ただし,行番号もあわせて出力すること.

(実行例) foo.c の中の 9 行目と 16 行目に printf が登場:

     $ perl find_printf.pl foo.c
     9:  printf("N = %d\n", N);
     16:  printf("1 + ... + %d = %d\n", N, sum);

解答例

     $n = 0;
     while ( $line = <> ){
        $n++;
        if ( $line =~ /printf/ ){
           print $n, ":", $line;
        } 
     }
     

解説

(1)テキストファイルの内容を行番号付きで出力
これに関しては,前回の例題1 で学習済なので説明は割愛する.
以下に示すように,解答例スクリプトの大部分は以前の例題と同じである:
     $n = 0;
     while ( $line = <> ){
        $n++;
        if ( $line =~ /printf/ ){
           print $n, ":", $line;
        } 
     }
     

(2)変数 $line の中に "printf" という文字列が含まれるか?
この例題のポイントは,一行ずつ読込んだ内容,つまり 変数 $line の内容の中に "printf" という文字列が登場するかどうか の判定である.

目的の「パターン」が「変数」の中に登場する場合のみ何か処理を実行したい場合, 次のようなスクリプトを使用するとよい:


     if ( 変数 =~ /パターン/ ){
        実行したい処理;
     }

上の解答例の場合,
     $n = 0;
     while ( $line = <> ){
        $n++;
        if ( $line =~ /printf/ ){
           print $n, ":", $line;
        }
     }
となっている.
つまり,変数 $line の内容を調べ,その中に printf というパターンが含まれていれば if 文の条件が成立することになる.