# CPAN モジュールで一行 abstract に UTF-8 書いた場合の Build.PL {{tag: perl, cpan, unicode}} {{toc 2-}} ## CPAN モジュールで一行 abstract に UTF-8 CPAN モジュールを書いた時に、POD にマルチバイト書いた場合とか、`=encoding UTF-8` したりすると思いますが、`=head1 NAME` の中で一行説明文を UTF-8 で書いた場合は、{{cpan: Module::Build}} で自動生成される META.json や META.yml 内の abstract 項目が文字化けてしまう。 =head1 NAME Acme::EnclosedChar - Ⓔⓝⓒⓛⓞⓢⓔⓓ Ⓐⓛⓟⓗⓐⓝⓤⓜⓔⓡⓘⓒⓢ Ⓔⓝⓒⓞⓓⓔⓡ 上のような POD から META.json が生成されて、以下のように化けてしまった。 { "abstract" : "Ⓔⓝⓒⓛⓞⓢⓔⓓ Ⓐⓛⓟⓗⓐⓝⓤⓜⓔⓡⓘⓒⓢ Ⓔⓝⓒⓞⓓⓔⓡ", "author" : [ "Dai Okabayashi " ], "dynamic_config" : 1, ### 対応 最初 手で直せばいいのかなと思ってやってみたけど `make dist` するとダメだった。どうすんだっけと思っていたら {{gh: kentfredric}} さんからパッチが送られて来て事なきを得た。 in [[https://github.com/bayashi/Acme-EnclosedChar/commit/6159dda0c36935b8ea579eef0405ebac3e33b939|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 とか書いてみたモジュールは以下のようなものです。 {{cpan: Acme::EnclosedChar}} use Acme::EnclosedChar qw/enclose_all/; Print enclose_all('Perl'); # Ⓟⓔⓡⓛ フォントはよしなに。 ⓎⒶⓅⒸ は㋶㋜㋣みたいだけど、Ⓐⓒⓜⓔ大全は Ⓕⓞⓡⓔⓥⓔⓡ!