「初めての 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"; }
長いし。。。ループ部分がほとんど理解できない件。これは難しすぎでしょ。