#!perl use 5.12.0; use warnings; use Benchmark qw{:hireswallclock cmpthese}; my ($x, $y, $z); my $x_base = 'x'; my $y_base = 'y'; my $z_base = 'z'; my @counts = (-10); my @lengths = (1, 4, 8, 16, 32, 64, 128); for my $count (@counts) { say '*' x 60; say 'Count: ', $count; for my $length (@lengths) { $x = $x_base x $length; $y = $y_base x $length; $z = $z_base x $length; say '-' x 60; say 'length $x = ', length $x; say 'length $y = ', length $y; say 'length $z = ', length $z; say '-' x 60; cmpthese $count => { join_2 => \&join_code_2, cat_2 => \&concat_code_2, join_3 => \&join_code_3, cat_3 => \&concat_code_3, join_6 => \&join_code_6, cat_6 => \&concat_code_6, join_12 => \&join_code_12, cat_12 => \&concat_code_12, join_24 => \&join_code_24, cat_24 => \&concat_code_24, join_48 => \&join_code_48, cat_48 => \&concat_code_48, }; } } sub join_code_2 { join '', $x, $y; } sub concat_code_2 { $x . $y; } sub join_code_3 { join '', $x, $y, $z; } sub concat_code_3 { $x . $y . $z; } sub join_code_6 { join '', $x, $y, $z, $x, $y, $z; } sub concat_code_6 { $x . $y . $z . $x . $y . $z; } sub join_code_12 { join '', $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z; } sub concat_code_12 { $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z; } sub join_code_24 { join '', $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z; } sub concat_code_24 { $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z; } sub join_code_48 { join '', $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z, $x, $y, $z; } sub concat_code_48 { $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z . $x . $y . $z; }