[Moscow.pm] Склеивание строк в perl5.8
Eugene Toropov
jt на aaanet.ru
Пт Окт 24 06:44:27 PDT 2008
http://www.ibm.com/developerworks/library/l-optperl.html - тут собсно и
объясняется, почему с джойном медленнее
>В perl5.8 есть как минимум три способа из большого количества маленьких
>строчек собрать одну большую:
> - конкатенация
> - push в массив и затем склейка через join
> - запись в скаляр через PerlIO
>
> Мне было интересно какой из этих методов работает быстрее, и я провел
> бенчмарк.
> Результаты оказались достаточно неочевидные:
>
> Rate array perl io concat
> array 132/s -- -30% -46%
> perl io 188/s 43% -- -23%
> concat 244/s 86% 30% --
>
> Самый простой способ оказался и самым быстрым :)
>
> Код использовался такой:
>
> use Benchmark qw(:hireswallclock cmpthese);
>
> my @test_data = (
> 'a' x 17,
> 'b' x 19,
> 'c' x 23,
> 'd' x 29,
> 'e' x 31,
> 'f' x 37,
> 'g' x 41,
> 'h' x 43,
> 'j' x 47,
> );
>
> cmpthese(
> 3000, {
> 'concat' => sub {
> my $scalar_c = '';
> for (my $i=0; $i < 1000; $i++) {
> foreach (@test_data) {
> $scalar_c .= $_;
> }
> }
> return $scalar_c;
> },
> 'array' => sub {
> my @a = ();
> for (my $i=0; $i < 1000; $i++) {
> foreach (@test_data) {
> push @a, $_
> }
> }
> return join '', @a;
> },
> 'perl io' => sub {
> my $scalar_io = '';
> open(my $fh, '>', \$scalar_io);
> for (my $i=0; $i < 1000; $i++) {
> foreach (@test_data) {
> print $fh $_;
> }
> }
> close $fh;
> return $scalar_io;
> },
> }
> );
>
> --
> WBR,
> Anton Yuzhaninov
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
Подробная информация о списке рассылки Moscow-pm