Регулярные выражения — Ruby и Perl

Я заметил некоторые экстремальные задержки в своих сценариях на Ruby (1.9), и после некоторых раскопок все сводилось к сопоставлению регулярных выражений. Я использую следующие тестовые сценарии в Perl и Ruby:

Perl:

$fname = shift(@ARGV);
open(FILE, "<$fname" );
while (<FILE>) {
    if ( /(.*?) \|.*?SENDING REQUEST.*?TID=(.*?),/ ) {
        print "$1: $2\n";
    }
}

Ruby:

f = File.open( ARGV.shift )
while ( line = f.gets )
    if /(.*?) \|.*?SENDING REQUEST.*?TID=(.*?),/.match(line)
        puts "#{$1}: #{$2}"
    end
end

Я использую один и тот же ввод для обоих сценариев, файл, содержащий всего 44290 строк. Время для каждого из них:

Perl:

xenofon@cpm:~/bin/local/project$ time ./try.pl input >/dev/null

real    0m0.049s
user    0m0.040s
sys     0m0.000s

Ruby:

xenofon@cpm:~/bin/local/project$ time ./try.rb input >/dev/null

real    1m5.106s
user    1m4.910s
sys     0m0.010s

Наверное, я делаю что-то ужасно глупое, какие-нибудь предложения?

Спасибо

24
задан xpapad 20 April 2012 в 09:15
поделиться