use strict; use warnings; use Benchmark qw/timethese/; # Test/Benchmark parameters. $main::string = q/CTTCGAATT/; our $time = 10000000; my $subs_to_test = { substr => \&by_substr, match => \&by_match, unpack => \&by_unpack, control => \&control, }; # Benchmark. timethese( $time, $subs_to_test ); # Subs being benchmarked. sub control { my @substrings; @substrings = qw/CTT CGA ATT/; return \@substrings; } sub by_substr { my $position = 0; my @substrings; while( $position < length $main::string ) { push @substrings, substr( $main::string, $position, 3 ); $position += 3; } return \@substrings; } sub by_match { my @substrings; while( $main::string =~ m/(...)/sg ) { push @substrings, $1; } return \@substrings; } sub by_unpack { my @substrings; @substrings = unpack( '(a3)*', $main::string ); return \@substrings; }