心に傷を負ったのでこれを記しておく。
The use of this variable anywhere in a program imposes a considerable performance penalty on all regular expression matches.
perl5.18なら直ってるみたいな噂も小耳に挟んだけど変わらなそげ。手元のperl5.18.1の結果。
% time perl -e 'sub f { $_[0] =~ /foo/ } f("foo") for 1..10000000' perl -e 'sub f { $_[0] =~ /foo/ } f("foo") for 1..10000000' 6.58s user 0.04s system 99% cpu 6.627 total % time perl -e 'warn $&; sub f { $_[0] =~ /foo/ } f("foo") for 1..10000000' Warning: something's wrong at -e line 1. perl -e 'warn $&; sub f { $_[0] =~ /foo/ } f("foo") for 1..10000000' 10.79s user 0.06s system 99% cpu 10.850 total
リャマ本には書いてた。
4/1追記: Plack::App::Proxyで使ってた。ごめんなさい。