Term::Encodingのサンプルプログラム
perldoc.jpに翻訳記事を上げるにあたりサンプルプログラムがあった
方がいいんじゃなかろうかと思いましたので、自分が翻訳したものに
ついてはサンプルプログラムを書こうかと思います。
訳があっても実例を知らないことには使い方もよくわからないと
思うし、実際にそういう声もありますので、何かのお役に立てれば
いいかなと思います。
用途
自分しか使わないプログラムであれば、Encode::encodeする部分は
決め打ちでもいいと思います。最近だと UTF-8で間違いないでしょう。
ただし他の人に使ってもらう場合であれば、そこは柔軟性を持たせた
方がいいでしょう。EUC-JPの人もいるかもしれませんし、Shift_JISの
人もいるかもしれませんのでね。
「$encodingっていう変数を書き換えて」、設定ファイルを用意するとかも
考えられますが、そんなの面倒なので自動検出したいですよね。
そこで使えるのが Term::Encodingです。term_encoding関数を呼び出せば、
今設定されている文字コードが取得できます。これを使って表示するものを
encodeすれば、文字化けすることなく表示できることでしょう。
サンプルプログラム
本ブログの RSSを取得して、タイトルを表示する簡単なプログラムを示します。
最後の printf文にある Encode::encodeで Term::Encoding::term_encodingを
使って取得した文字コードを利用しています。
#!/usr/bin/env perl use strict; use warnings; use LWP::UserAgent; use XML::RSS::LibXML; use Encode; use Term::Encoding qw(term_encoding); my $url = 'http://d.hatena.ne.jp/syohex/rss'; my $ua = LWP::UserAgent->new; my $res = $ua->get($url); unless ($res->is_success) { die "Can't download $url\n"; } my $rss = XML::RSS::LibXML->new; eval { $rss->parse($res->decoded_content); }; if ($@) { die "Parse Error\n"; } my $encoding = term_encoding(); for my $item (@{$rss->{items}}) { printf "Title %s \n", encode($encoding, $item->{title}); }
まとめ
Term::Encodingのサンプルプログラムについて説明しました。
なるべくではありますが、翻訳したらサンプルプログラムを
書いてブログに上げるということをしようと思います。