しかし、 test.pl < utf8.txtは行けるが、 test.pl utf8.txtはだめ。 前にも書いたけど、引数を指定した場合、<> は STDIN じゃないですから当然ですね。とりあえず use open IN => ':utf8'; とするほうが、スマートといえばスマートか? や、Encode::decode を使うのが駄目ってことはないと思うけど。 追記 dankogai さんから Trackback が飛んできて気づいたのだが、書き方が分かりにくいな。ここでは、 use strict; use warnings; use utf8; use open IN => ':utf8'; binmode STDOUT, ':utf8'; while (<>) { print if /[ぁ-ん]/; } とするのではなくて、山下さんの元のプログラムに対して use open を追