- RU.PERL ----------------------------------------------------------- RU.PERL - Msg : #1044 [644] От : Sergey E.Sumin 2:5025/17 31 октября 03, 10:39 Кому : All 01 ноября 03, 05:31 Тема : Re: Как посимвольно обработаь строку ------------------------------------------------------------------------------- From: "Sergey E.Sumin""Konstantin Stupnik" wrote in message news:bnsq1o$rla$1@host.talk.ru... ...skiped... > use Benchmark qw(:all); > > my $s="This is text"; > my $res; > > timethese(1000000, > { > 'substr'=>sub > { > $res=''; > for(0..length($s)-1) > { > $res.=substr($s,$_,1).'z'; > }; > }, > 's'=>sub > { > $res=$s; > $res=~s/(.)/$1z/g; > }, > 'split'=>sub > { > $res=''; > for(split(//,$s)) > { > $res.=$_.'z'; > } > }, > } > ); > > Результат: > > substr: 16 wallclock secs (15.71 usr + 0.00 sys = 15.71 CPU) @ > 63637.52/s > s: 23 wallclock secs (22.25 usr + 0.01 sys = 22.26 CPU) @ > 44917.58/s > split: 31 wallclock secs (31.73 usr + 0.05 sys = 31.78 CPU) @ > 31469.30/s ...skiped... У меня немного другой тест и совсем другие результаты use strict; use Benchmark qw(:all) ; my $a='safdsdfsdfsafdsdfsdfsafdsdfsdf'; timethis(1000000,'$a =~ s/(.)/$1z/g;'); $a='safdsdfsdfsafdsdfsdfsafdsdfsdf'; my $b; timethis(1000000, '$b = join "",map {substr($a,$_,1)."z"} 0..length($a)-1;' ); undef $b; timethis(1000000, 'for (split(/./,$a)) { $b .= $_."z"; }' ); #print $b; ---------------------------------------------------------------------------- --------- timethis 1000000: 0 wallclock secs ( 0.33 usr + 0.00 sys = 0.33 CPU) @ 304878 0.49/s (n=1000000) (warning: too few iterations for a reliable count) timethis 1000000: 2 wallclock secs ( 1.39 usr + 0.00 sys = 1.39 CPU) @ 718390 .80/s (n=1000000) timethis 1000000: 3 wallclock secs ( 3.31 usr + 0.00 sys = 3.31 CPU) @ 301932 .37/s (n=1000000) Сергей Сумин. --- Microsoft Outlook Express 6.00.2800.1106 * Origin: RELEX Inc. (2:5025/17@fidonet)