<HTML><BODY><p>1) А теперь у получившейся переменной замени 1 символ и увидь как скорость просела еще сильнее.<br>2) <br>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"'<br>qwe     w<br>qwe     t<br>qte     t<br>Я не знаю что ты там изобретаешь, но наверно 3й вариант для тебя.<br><br data-mce-bogus="1"></p><p>cабстр в SV кладет поинтер на оригинальную строку со смещением.<br><br>Вторник, 10 марта 2015, 18:42 +03:00 от Andrey Kovbovich <akovbovich@gmail.com>:<br>
</p><blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;">
        <div id="">
        



    









        
        


        
        
        

        

        
        

        
        

        
        



<div class="js-helper js-readmsg-msg">
        <style type="text/css"></style>
        <div>
                <base target="_self" href="https://e.mail.ru/">
                
                        <div id="style_14260021370000000991_BODY"><div dir="ltr">Коля, это было бы слишком хорошо, если бы было правдой :) Потому что я прогнал тест и выяснилось 1) скорость зависит от длины строки 2) версия с перестановкой указателей - это ты про что? нужны как бы мутабельные строки, или ты хочешь сказать что сабстр делайт элиас для исходных строк?</div><div><br><div>10 марта 2015 г., 18:25 пользователь <a href="//e.mail.ru/compose/?mailto=mailto%3aWarstone@list.ru" target="_blank">Warstone@list.ru</a> <span dir="ltr"><<a href="//e.mail.ru/compose/?mailto=mailto%3awarstone@list.ru" target="_blank">warstone@list.ru</a>></span> написал:<br><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div>Потому что substr не копирует строку, он только в SV указатель на строку меняет. Это фишка конкретно сабстера. По этому его скорость работы не зависит от размеров строки и смещения в ней.<br>join и конкат создает новую строку (очевидно)<br><br><br>Вторник, 10 марта 2015, 17:21 +03:00 от Andrey Kovbovich <<a href="//e.mail.ru/compose/?mailto=mailto%3aakovbovich@gmail.com" target="_blank">akovbovich@gmail.com</a>>:<br>
<blockquote style="border-left:1px solid #0857a6;margin:10px;padding:0 0 0 10px">
        <div>
        



    









        
        


        
        
        

        

        
        

        
        

        
        



<div>
        
        <div><div><div>
                
                
                        <div><div dir="ltr">Отвечая на свой же вопрос - потому что join и concat предварительно делают что-то наподобие my$z=" "x((length$x)+(length$y)); Т.к. такое выражение выравнивает substr к показателям join и concat. Кстати, еще вопрос, где у Перла функция конкатенации (та, что символ-точка)? В CORE::* не нашел. Мне нужен кодереф от нее.</div><div><br><div>2015-03-10 17:03 GMT+03:00 Andrey Kovbovich <span dir="ltr"><<a href="https://e.mail.ru/compose/?mailto=mailto%3aakovbovich@gmail.com" target="_blank">akovbovich@gmail.com</a>></span>:<br><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Кто-нибудь знает, за счет чего substr быстрее?</div><div><br></div><div>$ 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)}});'</div><div>         Rate   join concat substr</div><div>join   3922/s     --    -0%   -58%</div><div>concat 3937/s     0%     --   -57%</div><div>substr 9259/s   136%   135%     --</div><div><br></div></div>
</blockquote></div><br></div>
</div>
                        </div></div><span><font color="#888888"><div>-- <br>
Moscow.pm mailing list<br>
<a href="https://e.mail.ru/compose?To=moscow%2dpm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div>
                
                
        </font></span></div>

        
</div>


</div>
</blockquote>
<br></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="//e.mail.ru/compose/?mailto=mailto%3amoscow%2dpm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br></div>
</div>
                        <div>-- <br>
Moscow.pm mailing list<br>
<a href="/compose?To=moscow%2dpm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</div>
                
                <base target="_self" href="https://e.mail.ru/">
        </div>

        
</div>


</div>
</blockquote>
<br></BODY></HTML>