1) А теперь у получившейся переменной замени 1 символ и увидь как скорость просела еще сильнее. 2) warstone@dev:~$ perl -e 'my $a="qwe"; my $b = substr($a, 1, 1); print "$a\t$b\n"; $b = "t"; print "$a\t$b\n"; substr($a, 1, 1) = "t"; print "$a\t$b\n"' qwe w qwe t qte t Я не знаю что ты там изобретаешь, но наверно 3й вариант для тебя.
cабстр в SV кладет поинтер на оригинальную строку со смещением. Вторник, 10 марта 2015, 18:42 +03:00 от Andrey Kovbovich <[email protected]>: >Коля, это было бы слишком хорошо, если бы было правдой :) Потому что я прогнал >тест и выяснилось 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] > : >>>>Кто-нибудь знает, за счет чего 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] | http://moscow.pm.org >> >> >>-- >>Moscow.pm mailing list >>[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
