I ♥ WordPress

[時間割:Perl]『ミニマルPerl』その24
2009/04/03 02:17 posted by kunkichi

木曜日は「Perl」です。前回に引き続きスクリプト編。引数処理のところ。

ミニマルPerl Unix/LinuxユーザのためのPerl習得法
Tim Maher
オライリージャパン
売り上げランキング: 96883

引数の処理(続き)

  • 引数のフィルタ処理
    • 引数に対してフィルタを施してから処理する。前回使ったPerl版grepをもう一度使います。#!/usr/bin/perl -wnl
       
      BEGIN {
        $pattern=shift;
        defined $pattern and $pattern ne "" or
          warn "Usage: $0 'RE' filename\n" and
          exit 11;
      }
       
      /$pattern/ and print "$0:$_¥n";
      第1引数は検索パターンなので$patternに読み込んだ後にshift。残りの引数は検索対象のファイルになるんだけどこれをファイル名で順にソートして処理するようにする。・・・
      BEGIN {
        $pattern=shift;
        @ARGV = sort @ARGV; # ここでファイル名でソート
        defined $pattern and $pattern ne "" or
      ・・・
      で、実行。テスト用にこんなファイルを用意してみた。$ cat 1.txt
      chocolate
      cookie
      banana1
      $ cat 2.txt
      orange
      apple
      banana2
      では”banana”をgrepしてみる。$ ./grep.pl banana 1.txt 2.txt
      banana1
      banana2
      $./grep.pl banana 2.txt 1.txt
      banana1
      banana2
      常に同じ順番で表示されるようになるというわけ。
    • Perlのgrepを使ってフィルタ。ファイルのテストとか。@ARGV = grep { -T } @ARGV;この場合だと引数をチェックしてテキストファイルの引数だけが処理される。
    • 上記のgrepでファイルテストのフィルタを使って、バイナリとテキストを分けてみたり。@txt = grep { -T } @ARGV;
      @bin = grep { ! -T } @ARGV;
    • ファイルグロブを使えば引数自体がいらなくなる。たとえば、カレントディレクトリにある.dat拡張子のファイルでテキストデータのものを取得する@txt_dat = grep { -T } <*.dat>;

最近コマンドラインのツールを作ることが多いので、これはちょっと便利。

次からはif/elseとかの条件分岐です。

コメント&トラックバック

トラックバックURL





このページの先頭へ