Wide character in print at

原因

Wide character in print at というエラーは UTF-8 フラグが付いた文字列を print しようとしているからである。

http://www.ksknet.net/perl/wide_character.html

対策

UTF-8 フラグを取り外してから print すればエラーがでなくなります。

判別方法

UTF-8 フラグが付いているかどうかは utf8::is_utf8 を使用すればよい。

print utf8::is_utf8($string) ? 'flagged' : 'no flag';

解決方法

UTF-8 フラグが付いていたら、encode を使用してフラグをはずします。以下の例では $string を utf-8 に変換して出力します。

print encode('utf-8', $string);

utf8::is_utf8 について

UTF8 フラグのついた文字列というのは Perl の内部的なもの(Perl プログラム本体の内部で処理するデータ)であって、Perl の外に出すためのもの(Perl プログラムが出力するためのデータ)ではありません。
また、Perl の外から Perl の中に入ってくるもの(Perl プログラムへ入力されるデータ)も、Perl の内部的なものとは違います。
すなわち、標準出力、ファイルへの出力は、Perl の内部的なものを出しては駄目で、標準入力、ファイルからの入力では、Perl の内部的な文字列とは違うものが入ってきます。
()内の文字は筆者追加

http://www.rwds.net/kuroita/program/Perl_unicode.html#perlio

utf8::is_utf8 は、Perl 本体で処理する際にフラグが付加されているかどうかを判断する。
では、

utf8::* な関数は use しなくても使えます。use すると別の意味になってしまう

に記載されている「別の意味」とは何か?

に記載されているので参考にする。まとめようとしたが、重要な注意事項も書かれているので、詳細はリンクを見ることにする。