use utf8すると\dで全角数字がマッチする

#!/usr/bin/perl
use strict;
use warnings;

{
    use utf8;
    my $res = ('123' =~ /^\d+$/) ? "match" : "unmatch";
    print "use utf8 ... $res\n";
}

{
    no utf8;
    my $res = ('123' =~ /^\d+$/) ? "match" : "unmatch";
    print " no utf8 ... $res\n";
}

これを実行すると、こうなる。

use utf8 ... match
 no utf8 ... unmatch

これをDBのintegerなカラムにそのまま突っ込むと、当然のように0になってしまう罠。

他にも、use utf8してると全角アルファベットが\wにマッチしたり、そのへんの挙動が変わる。危ないところだった。

多分こういうのは常識なんだろうけど、こういう「日本のPerlにおける今時の常識」みたいなのをまとめた書籍が一冊欲しいな。