直してみた。JSONモジュールを使うように修正。
Encode::JavaScript::UCSというのがあるのを知った。
Encodeモジュールのサブクラスで大変簡潔に書かれて
いるので問題もないことでしょう。
#!/usr/bin/env perl use strict; use warnings; use autodie; use Encode; use Encode::JavaScript::UCS; use URI::Escape; use LWP::UserAgent; use JSON; use utf8; binmode STDOUT, ":encoding(UTF-8)"; my $word = shift or die "Usage $0 word\n"; my $url_base = 'http://www.google.com/transliterate?langpair=ja-Hira|ja&text='; my $ua = LWP::UserAgent->new(env_proxy => 1); my $url = $url_base . uri_escape_utf8(decode_utf8($word)); my $res = $ua->get($url); if ($res->is_error) { die "Can't download $url(word : $word)\n"; } my $decoded = $res->decoded_content; $decoded = Encode::JavaScript::UCS::decode("JavaScript-UCS", $decoded); my $json = JSON->new; my $obj = $json->relaxed([])->decode($decoded); for my $paragraph (@{$obj}) { my ($yomi, $kouhos) = @{$paragraph}[0, 1]; print "読み:\n $yomi\n"; print "変換候補:\n"; for my $kouho (@{$kouhos}) { print " $kouho\n"; } printf "\n"; }
% perl google_japanese.pl はつねみく 読み: はつね 変換候補: 初音 初音 初値 はつね 初子 読み: みく 変換候補: ミク ミク 未来 mixi Mixi
JSONモジュールの使い方を間違っていたのもありましたね。
ドキュメントが長いから調べたらいい場所がわかりづらいん
ですよね。サンプルコードがいっぱいあるとうれしいな〜。