ここで言うところの日本語の定義は、ひらがな、カタカナとする。マッチングには\p{InHiragana}や\p{InKatakana}を使うとする。このブロックを使うにはUTF-8フラグがONになっていないといけない。まずは以下のようにしてチェックする。この結果は一切表示されないので、hoge.txtの内容を読むとutf8フラグがOFFの状態ということになる。
$ perl -lne 'print if utf8::is_utf8($_);' hoge.txt
ということで、まずはutf8フラグをONにして、その内容を評価する。ただし、出力する内容はutf8フラグがOFFになっていないといけないので、encodeモジュールに含まれるdecode関数を使う。以下のようにすれば、日本語を含む行だけを抽出できる。
$ perl -MEncode -lne 'print if decode(q(utf8), $_) =~ m/\p{InHiragana}|\p{InKatakana}/;' hoge.txt