sub xarg { my $tmp = $_[0]; length $tmp }
sub xarg_shift { my $tmp = shift; length $tmp }
####
Benchmark: running arg, arg_shift, noarg, noarg2, xarg, xarg_shift for at least 10 CPU seconds...
arg: 10 wallclock secs (10.52 usr + -0.01 sys = 10.51 CPU) @ 489653.09/s (n=5146254)
arg_shift: 10 wallclock secs (10.28 usr + 0.00 sys = 10.28 CPU) @ 414663.33/s (n=4262739)
noarg: 9 wallclock secs (10.00 usr + 0.00 sys = 10.00 CPU) @ 287455.40/s (n=2874554)
noarg2: 11 wallclock secs (10.55 usr + 0.00 sys = 10.55 CPU) @ 282535.73/s (n=2980752)
xarg: 10 wallclock secs (10.59 usr + 0.00 sys = 10.59 CPU) @ 337761.28/s (n=3576892)
xarg_shift: 10 wallclock secs (10.39 usr + 0.01 sys = 10.40 CPU) @ 297917.40/s (n=3098341)
Rate noarg2 noarg xarg_shift xarg arg_shift arg
noarg2 282536/s -- -2% -5% -16% -32% -42%
noarg 287455/s 2% -- -4% -15% -31% -41%
xarg_shift 297917/s 5% 4% -- -12% -28% -39%
xarg 337761/s 20% 18% 13% -- -19% -31%
arg_shift 414663/s 47% 44% 39% 23% -- -15%
arg 489653/s 73% 70% 64% 45% 18% --
####
$"=$,,$_=q>|\p4<6 8p
.q>.<4-KI;$,
.=pack'N*',"@{[unpack'C*',$_]
}"for split/;$_=$,,y[A-Z a-z]
{}cd;print lc