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

Denis Evdokimov evdokimov.denis на gmail.com
Ср Дек 24 10:08:36 PST 2008


Мне всегда казалось, что регулярки - удобный, но не быстрый инструмент.
И когда я написал в коде
if ( $phone =~ /^7/ )
Мне в голову пришла мысль, а не будет ли гораздо ли быстрее
if ( substr( $phone, 0, 1 ) == 7 )
глянув на эту строчку я немного поморщился из-за потери читабельности, что и
побудило меня провести  тест "Сколько мне стоит читабельность кода"
Результаты теста меня просто шокировали.
Собственно своим хорошим настроением я и делюсь.


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

my $phone = '70123456789';
my $vs = {
    regex => sub {
        if ( $phone =~ /^7/ ) { }
    },
    substr => sub {
        if ( substr( $phone, 0, 1 ) == 7 ) { }
    },

};
cmpthese - 5, $vs;

__END__

            Rate substr  regex
substr 3867126/s     --   -21%
regex  4887480/s    26%     --
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081224/718227bc/attachment-0001.html>


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