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.
In reply to Re: Bug or WAD in lvalue substr? (again.)
by kyle
in thread Bug or WAD in lvalue substr? (again.)
by BrowserUk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |