<div dir="ltr">Коля, это было бы слишком хорошо, если бы было правдой :) Потому что я прогнал тест и выяснилось 1) скорость зависит от длины строки 2) версия с перестановкой указателей - это ты про что? нужны как бы мутабельные строки, или ты хочешь сказать что сабстр делайт элиас для исходных строк?</div><div class="gmail_extra"><br><div class="gmail_quote">10 марта 2015 г., 18:25 пользователь <a href="mailto:Warstone@list.ru">Warstone@list.ru</a> <span dir="ltr"><<a href="mailto:warstone@list.ru" target="_blank">warstone@list.ru</a>></span> написал:<br><blockquote class="gmail_quote" 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="mailto:akovbovich@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 class="h5">
                
                
                        <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 class="HOEnZb"><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="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br></div>