Perlのテストの実行

h2xsを使ったモジュールは以下のコマンドでテストを実行できる。

% perl -Ilib -MTest::Harness -e 'runtests @ARGV' t/*.t

ただし、WindowsのActivePerlの場合はコマンド プロンプトでワイルドカードが展開されないため使用できない。

C:>perl.exe -e "print @ARGV" t*.t
t*.t

以下のコマンドであればWindowsのActivePerlでも使用できる。

C:>perl.exe -Ilib -MTest::Harness -e "runtests glob 't/*.t'"

Perlで合成文字を単独文字に変換する

Unicode::NormalizeでUTF-8の合成文字を単独文字に変換できます。

use utf8;
binmode STDOUT, ':utf8';

use Unicode::Normalize;

my $ka_dakuten = chr(0x304B) . chr(0x3099); # が
my $ga         = chr(0x304C)              ; # が

if ( NFC($ka_dakuten) eq $ga ) {
    print "「NFC($ka_dakuten)」は「$ga」と同じn";
}
「NFC(が)」は「が」と同じ

文字数も正しく?得られます。

use utf8;
binmode STDOUT, ':utf8';

use Unicode::Normalize;

my $ka_dakuten = chr(0x304B) . chr(0x3099); # が

printf "$ka_dakuten: %d文字n", length $ka_dakuten;
printf "NFC($ka_dakuten): %d文字n", length NFC($ka_dakuten);
が: 2文字
NFC(が): 1文字