[Moscow.pm] Не думал что регулярные выражения настолько быстры (или substr такой медленный...)

Denis Evdokimov evdokimov.denis на gmail.com
Чт Дек 25 03:15:37 PST 2008


Переделал тест и опять в шоке
Либо что-то не так в тестах, либо регулярки рвут substr как грелку

use strict;
use warnings;
use Benchmark qw(:all :hireswallclock);

my $phone = '70123456789';
my $cnt   = 1000;
my $vs = {
    regex => 'if ( $phone =~ /^7/ ) { }
              $phone .= "";' x $cnt,
    substr_eq => 'if ( substr($phone, 0, 1) eq "7" ) { }
                  $phone .= "";' x $cnt,
    substr => 'if ( substr($phone, 0, 1) == 7 ) { }
               $phone .= "";' x $cnt,
};

print "Benchmark: $Benchmark::VERSION\n";
print "PERL: $]\n";
cmpthese -20, $vs;

__END__

Benchmark: 1.07
PERL: 5.008008
            Rate    substr substr_eq     regex
substr    2451/s        --      -17%      -51%
substr_eq 2947/s       20%        --      -41%
regex     5027/s      105%       71%        --


Benchmark: 1.07
PERL: 5.008008
            Rate    substr substr_eq     regex
substr    2462/s        --      -16%      -52%
substr_eq 2922/s       19%        --      -43%
regex     5093/s      107%       74%        --


Benchmark: 1.07
PERL: 5.008008
            Rate    substr substr_eq     regex
substr    2433/s        --      -15%      -52%
substr_eq 2878/s       18%        --      -43%
regex     5066/s      108%       76%        --
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081225/441127a8/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm