ひどいミスしてた

こないだ書き直したコードが前に比べて妙に動作が重いと思って、読み直してみたら

sub foo {
    ...
    while ($cond) {
        require Foo;
        ...
    }
    ...
}

それはない。ありえない。だいたい8000回くらいwhileで回すんだけど、それだけ毎回requireしてたらそれは遅くて当然でした。なのでそこだけすぐに修正。

sub foo {
    require Foo;
    ...
    while ($cond) {
        ...
    }
    ...
}

こうしようかと思ったけど、もう少し考え直したらrequireするケースのほうが圧倒的に多いので、最初からuseしてしまうことにしました。

use Foo;
sub foo {
    ...
    while ($cond) {
        ...
    }
    ...
}

追記

なんか他の原因があった可能性が大ぽい。3ヶ月も前なのであんまりよく覚えてないけど、他にも少し手を入れたはずだし。id:hyukiのコメントにもあるけど、require%INCをチェックして一度しか読み込まないようにしているから。ただ、Perlのハッシュを引くコストは充分に小さいとはいえ、コストがゼロでできるわけじゃないから、まったく影響がないとも言い切れないけど。