[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