「初めての Perl」勉強8日目

ついに「初めての Perl」も最終章を迎える。長かった。。。

第十七章 上級テクニック

練習問題1

次のようなプログラムを書いてください。まずファイルから文字列のリストを読み込みます。次に、ユーザがキーボードから対話的に入力したパターンを文字列にマッチさせる、という処理を繰り返します。入力されたパターンが、ファイルに入っていた文字列何個にマッチしたか、および実際にマッチした文字列を表示するようにしてください。ファイル名はプログラム中に直接書いてしまって構いません。もしパターンが正しくなければ、そのエラーを報告してから、ユーザに再びパターンを入力してもらうようにします。ユーザがパターンの代わりに空行を入力したら、プログラムが終了するようにしてください。

ファイルを読み込んでパターンを入力してもらうのは分かるが、マッチした個数を計るとかエラーを報告してサイド入力してもらうとか、この辺が全然分からん。。。

#!/usr/local/bin/perl -w

my $filename = 'path/to/sample_text';
open FILE, $filename
    or die "Can not open '$filename': $!";
chomp(my @strings = <FILE>);

while (1) {
    print "Please enter a pattern: ";
    chomp(my $pattern = <STDIN>);
    last if $pattern =~ /^\s*$/;
    my @matches = eval {
        grep /$pattern/, @strings;
    };
    if ($@) {
        print "Error: $@";
    }
    else {
        my $count = @matches;
        print "There were $count matching strings:\n",
            map "$_\n", @matches;
    }
    print "\n";
}

長いし。。。ループ部分がほとんど理解できない件。これは難しすぎでしょ。