はじめてのPerl 第8章 正規表現によるマッチ 練習問題5

練習問題4を元にaで終わるワードの直後に続く最大5文字を別のキャプチャ変数にキャプチャしてください。コードを書き換え療法のキャプチャを表示するようにしてください。

#!/usr/bin/perl

use strict;
use warnings;

use 5.010;

while (<>) {
  chomp;
  my $names = "names";
  if ($_ =~ /(?<$names>\b\w*a\b)(.{0,5})/){
    print "'$names' contains '$+{names}$2'\n";
  }else{
    print "No Matche: $_ \n";
  }
}

引数として渡すファイルの内容は以下の通りです。

fred
wilma yesterday
barney
wilma&betty
camellia
anna
te
a
Mrs. wilma Frintstone
wilma!
wilma?
wilma  test
wilma aiueokaki
wilmawilma

実行コマンドは以下のとおりです。

$ ./practice5.pl < names.txt

結果は以下のようになります。

No Matche: fred
'names' contains 'wilma yest'
No Matche: barney
'names' contains 'wilma&bett'
'names' contains 'camellia'
'names' contains 'anna'
No Matche: te
'names' contains 'a'
'names' contains 'wilma Frin'
'names' contains 'wilma!'
'names' contains 'wilma?'
'names' contains 'wilma '
'names' contains 'wilma aiue'
'names' contains 'wilmawilma'