Perlのdecode

Perlのdecodeを使って [utf-8] → [euc-jp] に変換するときに変なエラーが起こったので、その対策をメモ。

use Encode;

##なんかもろもろ書いてあるとして

my $data = 'ハローワールド' #utf-8の文字列

$data = decode('utf-8', $data);
$data = encode('euc-jp', $data);

これを実行したところ、以下のエラーが出た。
Cannot decode string with wide characters #この後ろにEncode.pmのエラー行がでる
調べたところ、UTF-8フラグが立っているとこのエラーがでてしまうらしい。
これを回避するために、decodeを呼び出す前にUTF-8フラグをおろせばいいようです。

Encode::_utf8_off($data);
$data = decode('utf-8', $data);
$data = encode('euc-jp', $data);

これで成功する。
_utf8_offでUTF-8フラグをおろすことができるみたい。
参考

http://d.hatena.ne.jp/libkazz/20070605/1181026439