Ajaxへの熱が冷めはじめた昨今、しかしXMLファイルを扱う機会はあまり減りません。 使用したXML::Simpleモジュールのバージョンは2.18でした。 Perlのバージョンが5.8であれば、インストールされています。
my $xml = <<'XML';
<?xml version="1.0" encoding="UTF-8"?>
<urlset>
<url>http://127.0.0.1/</url>
<title>localhost</title>
<copyright>Administrator</copyright>
</urlset>
XML
use XML::Simple;
my $xs = new XML::Simple();
my $parser = $xs -> XMLin( $xml );
my %parse = (
'uri' => $parser -> {'uri'},
'title' => $parser -> {'title'},
'copyright' => $parser -> {'copyright'},
);
use utf8;
foreach my $key ( keys %parse ){
utf8::encode( $parse{$key} );
printf( "%s : %s\n", $key, $parse{$key} );
}
エンコードが正しく指定されていても、UTF-8以外であれば受け付けてくれません。
結果の文字列にBOMを付けるという余計な事をするため、 utf8::encodeでBOMを除去する処理が必要になってしまいます。 スイッチをつけるなどして、選べるようにしてほしい。