|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Renat Araslanow 2:5011/119 15 Jan 2001 00:36:16 To : All Subject : regexp --------------------------------------------------------------------------------
почему 1 while s/(\d)(\d\d\d)(?!\d)/$1 $2/; медленне в ~20 раз чем
1 while s/(\d+)(\d{3,})/$1 $2/; ?
я так понял это из-за свойства "жадности" +, но тогда как проходит сравнение?
вот програмка и рез-ты% (в файл 50 000 байт - одна строка из 1)
#!perl
use Benchmark;
open (FH,"ok")||die "can`t";
$_=<FH>;
$t0 = new Benchmark;
1 while s/(\d)(\d\d\d)(?!\d)/$1 $2/;
#1 while s/(\d+)(\d{3,})/$1 $2/;
$t1 = new Benchmark;
$td = timediff($t1, $t0);
print "the code took:",timestr($td),"\n";
>perl 3.pl
the code took:26 wallclock secs (24.67 usr + 0.03 sys = 24.70 CPU)
>perl 3.pl
the code took:445 wallclock secs (418.92 usr + 0.41 sys = 419.33 CPU)
perl от активстейта 5.6.0.620
[TEAM Чайник с программным управлениемЪ]
[Преждевременная оптимизация -- корень всех зол Д. Кнут]
--- спасибо фиpме AMD за Celeron от фирмы intel :-)
* Origin: BBS in DEN! DOWN: 644-888 23-07 (2:5011/119)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/22793a61f32c.html, оценка из 5, голосов 10
|