1.9 Unicode合成文字が含まれている文字列を正規化する

出力すると全く同じに見える文字列でも、eqで等しいかどうかを検証すると等しくなかったり、場合によってはそれぞれの長さが異なっていたりする。このような文字列をPerlに同じだと認識させたい。

# 等しくない文字列の一方または両方にUnicodeの基底文字と結合文字のペア
# (結合文字シーケンス)が含まれている場合は、それらの文字列は直接比較
# せず、Unicode::NormalizeモジュールのNFD()関数で正規化してから比較する。
use Unicode::Normalize;
$s1 = "fa\x{E7}ade";
$s2 = "fac\x{0327}ade";
if (NFD($s1) eq NFD($s2)) { print "Yup!\n" }