古い記事
ランダムジャンプ
新しい記事
open の引数は「FILEHANDLE」「MODE」「ファイル名など」、に分けて渡すのがセキュリティ上良いらしいのだが、面倒なこともある。
例えば、perl 5.8.5 と 5.8.6 で試したんだけど、下記のスクリプトを実行すると「A」だけ文字化けする。
みんなどうやってるんだろう。
いちいち "<:utf8" とかやりたくないし。
たぶん私が何か使い方を間違っているんだと思う。
「use open ':utf8'」の意味を勘違いしているのかも。

#!/usr/bin/perl
use strict;
use warnings;
use Encode;
use utf8;
use open ':utf8';
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

my $fn = shift @ARGV;
my $fh;

# A
open $fh, "<", $fn or die $!;
print while <$fh>;
close $fh;

# B
open $fh, "<:utf8", $fn or die $!;
print while <$fh>;
close $fh;

# C
open $fh, $fn or die $!;
print while <$fh>;
close $fh;

# D
open $fh, "< $fn" or die $!;
print while <$fh>;
close $fh;

ということで、あまりに基礎的なことでアレですが、こういう場合どうしたら良いかご存知の方、教えてください!
ファイルにせよ、STDIN にせよ、ともかくどんなルートで来ようとも入力された UTF-8 文字列が、何も気にせずとも内部コードになっていれば嬉しいのです。
なんか最近、大抵のタスクではまるのはこのあたりなので疲れ気味。

追記: はてブのコメントで 5.8.8 では問題ないとの情報を頂きました。
ありがとうございます。さくらの500円レンタルサーバが 5.8.8 なので確認してみたところ、確かに文字化けしませんでした!
5.8.8 (or 5.10) の普及待ちですかね…。
この記事に言及しているこのブログ内の記事