in reply to Bug or WAD in lvalue substr? (again.)

I'm not sure what code you're using for this. The node you reference doesn't do what your node seems to be doing.

Anyway, I wrote this to verify the behavior you describe:

use Benchmark 'cmpthese'; my $str = 'a' x 1_000_000; cmpthese( -2, { substr_lvalue => sub { substr_lvalue( "$str" ) }, substr_mod => sub { substr_mod( "$str" ) }, } ); sub substr_lvalue { substr( $_[0], 0, 1 ) = '' while $_[0]; return; } sub substr_mod { substr( $_[0], 0, 1, '' ) while $_[0]; return; }
Rate substr_lvalue substr_mod substr_lvalue 2.58/s -- -50% substr_mod 5.16/s 101% --

I don't have much to add beyond that. My first thought about this was that the lvalue case must allow something that the four argument case can't allow, but I hadn't figured out what that was when I read the reply from tye that laid it out.