初めての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)