日本語含む正規表現が遅いときがあるよ

こんな現象見つけた。

use utf8;
use Time::HiRes;
use Benchmark qw(:all :hireswallclock);

sub five {
    my $a = 'あいうえお';
    my $b = 'あれれ';

    ($b =~ /^\s*$a\s*$/) ? 1 : 0;
}

sub three {
    my $a = 'あいう';
    my $b = 'あれれ';

    ($b =~ /^\s*$a\s*$/) ? 1 : 0;
}

my $res = timethese(10, {
                   five => \&five,
                   three => \&three,
              });

cmpthese($res);

まあベンチマークとるまでもなく体感で違うんですが、手元のCentOSでの結果。

Benchmark: timing 10 iterations of five, three...
      five: 21.6958 wallclock secs (21.69 usr +  0.00 sys = 21.69 CPU) @  0.46/s (n=10)
     three: 5.07832e-05 wallclock secs ( 0.00 usr +  0.00 sys =  0.00 CPU)
            (warning: too few iterations for a reliable count)
        s/iter                 five                three
five      2.17                   --                -100%
three 1.00e-16 2168999999999999744%                   --

わーい。つまりひらがな5文字にすると2秒ぐらい掛るように。これ1文字足したり引いたりいろいろすると1秒以下になったりします。微妙なとこでプランが変わるような感触。

Perlは5.8.8、関係あるのかどうかEncodeは2.18。
これ、既知のアレなのかな。

まあ、このコードの場合先に$bの先頭末尾から空白文字を削ってeqで比べたほうがいい、ということでいいんですが、ちょっとなにやら不穏な気配がしたもので。日本語含みの場合気をつけなきゃいけないってこと?

正規表現先頭の「^\s*」が怪しいのかな。
encode_utf8してから比べるようにすることでも回避できるようですが…あまりやりたくないなあ。