テストで質問があります:
ファイル内の行数と単語数を数えるプログラムの何が問題になっていますか?
open F, $ARGV[0] || die $!;
my @lines = <F>;
my @words = map {split /\s/} @lines;
printf "%8d %8d\n", scalar(@lines), scalar(@words);
close(F);
私の推測は次のとおりです。
- ファイルが存在しない場合、プログラムはそれについて教えてくれません。
ファイルに句読点がある場合、プログラムはそれらをカウントします。たとえば、
abc cba , , ,dce
5語になりますが、一方
wc
で同じ結果を出力するので、正しい動作と考えてよいでしょう。- が大きなファイルの場合は、配列
F
にダンプしないで、行を繰り返し処理する方がよい場合があります。lines
もっと些細なアイデアはありますか?