$string_out = foo($string_in);
####
use strict;
use warnings;
use Benchmark qw(:all);
use constant COUNT => 200000;
my($str, $tmp, $len);
sub in1 ($) {
$tmp = length($_[0]);
}
sub in2 ($) {
$tmp = length(${$_[0]});
}
sub out1 () {
return($str);
}
sub out2 () {
return(\$str);
}
sub fun1 ($) {
my $new = $_[0] . "x";
return($new);
}
sub fun2 ($) {
my $new = ${ $_[0] } . "x";
return(\$new);
}
foreach $len (1, 10, 100) {
$str = "A" x ($len * 1000);
timethese(10, {
"in1x$len" => sub { for (1 .. COUNT) { in1($str) } },
"in2x$len" => sub { for (1 .. COUNT) { in2(\$str) } },
"out1x$len" => sub { for (1 .. COUNT) { $tmp = out1() } },
"out2x$len" => sub { for (1 .. COUNT) { $tmp = out2() } },
"fun1x$len" => sub { for (1 .. COUNT) { $tmp = fun1($str) } },
"fun2x$len" => sub { for (1 .. COUNT) { $tmp = fun2(\$str) } },
});
}
####
Benchmark: timing 10 iterations of fun1x1, fun2x1, in1x1, in2x1, out1x1, out2x1...
fun1x1: 4 wallclock secs ( 4.31 usr + 0.01 sys = 4.32 CPU) @ 2.31/s (n=10)
fun2x1: 5 wallclock secs ( 4.92 usr + 0.00 sys = 4.92 CPU) @ 2.03/s (n=10)
in1x1: 2 wallclock secs ( 1.08 usr + 0.00 sys = 1.08 CPU) @ 9.26/s (n=10)
in2x1: 1 wallclock secs ( 1.48 usr + 0.00 sys = 1.48 CPU) @ 6.76/s (n=10)
out1x1: 3 wallclock secs ( 2.40 usr + 0.00 sys = 2.40 CPU) @ 4.17/s (n=10)
out2x1: 1 wallclock secs ( 1.58 usr + 0.00 sys = 1.58 CPU) @ 6.33/s (n=10)
Benchmark: timing 10 iterations of fun1x10, fun2x10, in1x10, in2x10, out1x10, out2x10...
fun1x10: 16 wallclock secs (15.72 usr + 0.04 sys = 15.76 CPU) @ 0.63/s (n=10)
fun2x10: 12 wallclock secs (12.33 usr + 0.01 sys = 12.34 CPU) @ 0.81/s (n=10)
in1x10: 1 wallclock secs ( 1.08 usr + 0.00 sys = 1.08 CPU) @ 9.26/s (n=10)
in2x10: 2 wallclock secs ( 1.47 usr + 0.00 sys = 1.47 CPU) @ 6.80/s (n=10)
out1x10: 6 wallclock secs ( 6.62 usr + 0.00 sys = 6.62 CPU) @ 1.51/s (n=10)
out2x10: 2 wallclock secs ( 1.59 usr + 0.00 sys = 1.59 CPU) @ 6.29/s (n=10)
Benchmark: timing 10 iterations of fun1x100, fun2x100, in1x100, in2x100, out1x100, out2x100...
fun1x100: 119 wallclock secs (118.82 usr + 0.03 sys = 118.85 CPU) @ 0.08/s (n=10)
fun2x100: 89 wallclock secs (87.76 usr + 0.05 sys = 87.81 CPU) @ 0.11/s (n=10)
in1x100: 1 wallclock secs ( 1.10 usr + 0.00 sys = 1.10 CPU) @ 9.09/s (n=10)
in2x100: 1 wallclock secs ( 1.49 usr + 0.01 sys = 1.50 CPU) @ 6.67/s (n=10)
out1x100: 43 wallclock secs (43.27 usr + 0.04 sys = 43.31 CPU) @ 0.23/s (n=10)
out2x100: 2 wallclock secs ( 1.57 usr + 0.00 sys = 1.57 CPU) @ 6.37/s (n=10)