[時間割:Perl]『ミニマルPerl』その24
2009/04/03 02:17 posted by kunkichi
木曜日は「Perl」です。前回に引き続きスクリプト編。引数処理のところ。
ミニマルPerl Unix/LinuxユーザのためのPerl習得法
posted with amazlet at 08.10.06
Tim Maher
オライリージャパン
売り上げランキング: 96883
オライリージャパン
売り上げランキング: 96883
引数の処理(続き)
- 引数のフィルタ処理
- 引数に対してフィルタを施してから処理する。前回使ったPerl版grepをもう一度使います。
#!/usr/bin/perl -wnl第1引数は検索パターンなので$patternに読み込んだ後にshift。残りの引数は検索対象のファイルになるんだけどこれをファイル名で順にソートして処理するようにする。
BEGIN {
$pattern=shift;
defined $pattern and $pattern ne "" or
warn "Usage: $0 'RE' filename\n" and
exit 11;
}
/$pattern/ and print "$0:$_¥n";・・・で、実行。テスト用にこんなファイルを用意してみた。
BEGIN {
$pattern=shift;
@ARGV = sort @ARGV; # ここでファイル名でソート
defined $pattern and $pattern ne "" or
・・・
$ cat 1.txt
chocolate
cookie
banana1$ cat 2.txtでは”banana”をgrepしてみる。
orange
apple
banana2$ ./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>;
- 引数に対してフィルタを施してから処理する。前回使ったPerl版grepをもう一度使います。
最近コマンドラインのツールを作ることが多いので、これはちょっと便利。
次からはif/elseとかの条件分岐です。







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