<HTML><BODY>Потому что substr не копирует строку, он только в SV указатель на строку меняет. Это фишка конкретно сабстера. По этому его скорость работы не зависит от размеров строки и смещения в ней.<br>join и конкат создает новую строку (очевидно)<br><br><br>Вторник, 10 марта 2015, 17:21 +03:00 от Andrey Kovbovich <akovbovich@gmail.com>:<br>
<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_14259972970000000503_BODY"><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="//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>-- <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>