初めてのPerl 第9章
練習問題の回答をメモ。
ex09-1
#!/usr/bin/perl use strict; my $what = 'fred|barney'; while (<>) { chomp; if (/($what){3}/) { print "Matched: $`<$&>$'\n"; } else { print "No match.\n"; } }
ex09-2
#!/usr/bin/perl use strict; my %sum; while (<>) { chomp; if (/^=item\s+([a-zA-Z_]\w*)/) { print "$1\n"; } }
ex09-3
#!/usr/bin/perl use strict; my %sum; while (<>) { chomp; if (/^=item\s+([a-zA-Z_]\w*)/) { # p101 の練習問題2(ex05-2)を参考にした $sum{$1} += 1; } } foreach my $item (sort keys %sum) { if ($sum{$item} >= 3) { print "$item <<$sum{$item}>> times.\n"; } }
@ARGV を使うやり方は思いつかなかった。自分は以下のようにコマンドラインからファイルを指定した。
% perldoc -l perlfunc | xargs perl ex09-3.pl | less
反省点
ダイヤモンド演算子はファイル名を得るのに @ARGV の内容を調べるよ。忘れずに活用しよう。(p.109)