Perl5.8以降のEncode その2

Perl5.8以降のEncode - XXXannexの続きの話。Encode::Guessは、推測の候補が2つ以上あるとEncode::Encodingのオブジェクトではなくエラーメッセージを返すらしいです。

On failure, $decoder now contains an error message so the whole thing would be as follows;

Encode::Guess - Guesses encoding from data - metacpan.org

Encode::Guess - Guesses encoding from data - metacpan.org

# more elaborate way
use Encode::Guess;
my $enc = guess_encoding($data, qw/euc-jp shiftjis 7bit-jis/);
ref($enc) or die "Can't guess: $enc"; # trap error this way
$utf8 = $enc->decode($data);
# or
$utf8 = decode($enc->name, $data)

実際はdieしてしまっては困るので、他の外部要因から決め打ちするとかしないといけないのでしょうね。とりあえず自分のプログラムでは

@lines = split(/\n/, encode('euc-jp', decode("Guess", join("\n", @lines))));

まるごと入れるという力技にしました・・・。
こちらも参照。
404 Blog Not Found:ruby|perl - 文字コードのちょっと高度な判定