There are other ways of mutating a string than just appending to the end. For example:
$n=1e3; cmpthese -1,{ a=>q[ my$s = chr(0)x$n; for my $i ( 0..length($s)-1){ substr $s, $i, 1, chr(1); } ], b=>q[ my$s = chr(0)x$n; for my $i ( 0..length($s)-1){ $s = substr($s,0,$i-1) . chr(1) . substr $s,$i+1; } ] };; Rate b a b 811/s -- -85% a 5525/s 581% -- $n=1e4; cmpthese -1,{ a=>q[ my$s = chr(0)x$n; for my $i ( 0..length($s)-1){ substr $s, $i, 1, chr(1); } ], b=>q[ my$s = chr(0)x$n; for my $i ( 0..length($s)-1){ $s = substr($s,0,$i-1) . chr(1) . substr $s,$i+1; } ] };; Rate b a b 13.0/s -- -98% a 556/s 4173% -- $n=1e5; cmpthese -1,{ a=>q[ my$s = chr(0)x$n; for my $i ( 0..length($s)-1){ substr $s, $i, 1, chr(1); } ], b=>q[ my$s = chr(0)x$n; for my $i ( 0..length($s)-1){ $s = substr($s,0,$i-1) . chr(1) . substr $s,$i+1; } ] };; (warning: too few iterations for a reliable count) s/iter b a b 12.5 -- -100% a 1.77e-002 70277% --
In reply to Re^2: programming languages and immutable data types
by BrowserUk
in thread programming languages and immutable data types
by mattk1
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |