文字列を print すると「Wide character in print at」と出力されて困った
以下のプログラム(参考:作って学ぶ、今どきのWebサービス: 第2回 RSSフィードの料理はLWPとXML::RSSにおまかせ)を実行したら、「Wide character in print at」というメッセージが print を実行する度に出力されてしまった。
#!/usr/local/bin/perl # http://www.ibm.com/developerworks/jp/webservices/library/itm-ws2-rss/ use strict; use Encode; use LWP::Simple; use XML::RSS; my $url = shift; my $document = LWP::Simple::get($url) or die "cannot get content from $url"; my $rss = XML::RSS->new; $rss->parse($document); for (@{$rss->{items}}) { print $_->{title}, "\n"; }
ググってみると、どうやら、「UTF-8フラグが付いた文字列をprintしようとしている」ことが問題だったらしい。(UTF-8フラグって何だろう…)
参考:Wide character in print at ...
まず、次の方法でUTF-8フラグが付いているかの確認をしてみると、案の定、付いていた。
UTF8フラグが付いているかの確認
print utf8::is_utf8($string) ? 'flagged' : 'no flag';
解決方法としては、以下の2つのいづれかを使えばOK。
$string を utf-8 に変換
print encode('utf-8', $string);
IO layer を UTF-8 にする
binmode(STDOUT, ":utf8");