Коля, это было бы слишком хорошо, если бы было правдой :) Потому что я прогнал тест и выяснилось 1) скорость зависит от длины строки 2) версия с перестановкой указателей - это ты про что? нужны как бы мутабельные строки, или ты хочешь сказать что сабстр делайт элиас для исходных строк?
10 марта 2015 г., 18:25 пользователь [email protected] <[email protected]> написал: > Потому что substr не копирует строку, он только в SV указатель на строку > меняет. Это фишка конкретно сабстера. По этому его скорость работы не > зависит от размеров строки и смещения в ней. > join и конкат создает новую строку (очевидно) > > > Вторник, 10 марта 2015, 17:21 +03:00 от Andrey Kovbovich < > [email protected]>: > > Отвечая на свой же вопрос - потому что join и concat предварительно > делают что-то наподобие my$z=" "x((length$x)+(length$y)); Т.к. такое > выражение выравнивает substr к показателям join и concat. Кстати, еще > вопрос, где у Перла функция конкатенации (та, что символ-точка)? В CORE::* > не нашел. Мне нужен кодереф от нее. > > 2015-03-10 17:03 GMT+03:00 Andrey Kovbovich <[email protected] > <https://e.mail.ru/compose/?mailto=mailto%[email protected]>>: > > Кто-нибудь знает, за счет чего substr быстрее? > > $ perl -MBenchmark=cmpthese > -wE'my$x="0"x1_000_000;my$b="1"x100_000;cmpthese(10000,{concat=>sub{my$z=$x.$b;},substr=>sub{my$z="";substr$z,(length$z),(length$x),$x;substr$z,(length$z),(length$b),$b;},join=>sub{my$z=join("",$x,$b)}});' > Rate join concat substr > join 3922/s -- -0% -58% > concat 3937/s 0% -- -57% > substr 9259/s 136% 135% -- > > > -- > Moscow.pm mailing list > [email protected] <https://e.mail.ru/compose?To=moscow%[email protected]> | > http://moscow.pm.org > > > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > >
-- Moscow.pm mailing list [email protected] | http://moscow.pm.org
