CPAN モジュールで一行 abstract に UTF-8 書いた場合の Build.PL
CPAN モジュールで一行 abstract に UTF-8
CPAN モジュールを書いた時に、POD にマルチバイト書いた場合とか、=encoding UTF-8
したりすると思いますが、=head1 NAME
の中で一行説明文を UTF-8 で書いた場合は、Module::Build で自動生成される META.json や META.yml 内の abstract 項目が文字化けてしまう。
=head1 NAME
Acme::EnclosedChar - Ⓔⓝⓒⓛⓞⓢⓔⓓ Ⓐⓛⓟⓗⓐⓝⓤⓜⓔⓡⓘⓒⓢ Ⓔⓝⓒⓞⓓⓔⓡ
上のような POD から META.json が生成されて、以下のように化けてしまった。
{
"abstract" : "âºâââââ¢ââ â¶ââââââ¤âââ¡ââ⢠âºââââââ¡",
"author" : [
"Dai Okabayashi <bayashi@cpan.org>"
],
"dynamic_config" : 1,
対応
最初 手で直せばいいのかなと思ってやってみたけど make dist
するとダメだった。どうすんだっけと思っていたら @kentfredric さんからパッチが送られて来て事なきを得た。
in Build.PL
my $abstract = 'Ⓔⓝⓒⓛⓞⓢⓔⓓ Ⓐⓛⓟⓗⓐⓝⓤⓜⓔⓡⓘⓒⓢ Ⓔⓝⓒⓞⓓⓔⓡ';
if ( $] > 5.008001 ) {
utf8::decode($abstract);
} else {
$abstract ='Enclosed Alphanumerics Encoder';
}
Build.PL にハードコーディング
Build.PL で `use utf8' すると良さそうだけど、Perl のバージョンを見てハードコーディングしちゃった方がポータブルらしい、という対応で dist_abstract は自動生成に任せてたんだけど、まあ編集することもないし。
というわけで、
モジュールの一行説明文に UTF-8 とか書いてみたモジュールは以下のようなものです。
use Acme::EnclosedChar qw/enclose_all/;
Print enclose_all('Perl'); # Ⓟⓔⓡⓛ
フォントはよしなに。
ⓎⒶⓅⒸ は㋶㋜㋣みたいだけど、Ⓐⓒⓜⓔ大全は Ⓕⓞⓡⓔⓥⓔⓡ!