use strict; use warnings; use Benchmark qw( cmpthese ); my $OUTER = $ARGV[0] || -5; my %tests = ( 'substr3' => '$a = substr($a, 1)', 'substr4' => 'substr($a, 0, 1, "")', 's///' => '$a =~ s/.//s', ); my %bench = map { $_ => "use strict; use warnings; for (1 .. our $inner) { local our \$a = our \$arg; $tests{$_} while length(\$a); } " } keys %tests; for ( [ '20,000', 80_000/20_000, 'a' x 20_000 ], [ '40,000', 80_000/40_000, 'a' x 40_000 ], [ '80,000', 80_000/80_000, 'a' x 80_000 ], ) { my $name = $_->[0]; local our $inner = $_->[1] local our $arg = $_->[2]; print("--------------------\n"); print("$name\n"); print("\n"); cmpthese($OUTER, \%bench); print("\n"); }