perlの文字列のパターンマッチが上手く行かない時
ハマったのでメモ。
次のようなコードを実行した際、上手くマッチしない場合がある。
$str = [DBから取ってきた文字列];
$ptn = '携帯';
if ( $str =~ /$ptn/){
print 'Match.';
}
else{
print 'Unmatch.';
}
この時、$str,$ptnをprintで標準出力に表示してみると、意図しない文字列になっている事がある。
この場合、次のように変更して改善される場合がある。
use Encode qw(decode encode);
$str = [DBから取ってきた文字列];
$ptn = decode('utf8','携帯');
if ( $str =~ /$ptn/){
print 'Match.';
}
else{
print 'Unmatch.';
}
ポイントは、文字列を保持している変数が、実際は文字列 or バイト列のどちらの形で文字列を持っているか、という事。