use warnings; use strict; use Benchmark qw( timethese cmpthese ); my $sample = ">gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus] LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX IENY >SEQUENCE_1 MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGLEKKTEDFAAEVAAQL "; foreach(1..10){ $sample .= $sample; } my @sample_array = split "\n", $sample; sub tr1_count_ar { return $sample =~ tr/>//; } sub tr2_count_ar { my $c; foreach(@sample_array) { $c += $_ =~ tr/>//; } return $c; } sub s1_count_ar { my $c; foreach(@sample_array) { $c += $_ =~ s/^>/>/g; } return $c; } sub s2_count_ar { return $sample =~ s/>/>/g; } sub m1_count_ar { my $c; $c += () = $sample =~ m/>/g; return $c; } sub m2_count_ar { my $c; foreach(@sample_array) { $c += () = $_ =~ m/^>/; } return $c; } sub m3_count_ar { my $c; foreach(@sample_array) { $c++ if $_ =~ m/^>/; } return $c; } sub g_count_ar { my $c; $c = scalar grep /^>/, @sample_array; return $c; } print "tr1: ", tr1_count_ar( ) ,"\n"; print "tr2: ", tr2_count_ar( ) ,"\n"; print "s1: ", s1_count_ar( ) ,"\n"; print "s2: ", s2_count_ar( ) ,"\n"; print "m1: ", m1_count_ar( ) ,"\n"; print "m2: ", m2_count_ar( ) ,"\n"; print "m3: ", m3_count_ar( ) ,"\n"; print "g: ", g_count_ar( ) ,"\n"; print '-'x80,"\n"; print join "\n", @sample_array[0..6]; print "\n",'-'x80,"\n"; my $results = timethese ( -10, { 'tr1' => 'tr1_count_ar', 'tr2' => 'tr2_count_ar', 's1' => 's1_count_ar', 's2' => 's2_count_ar', 'm1' => 'm1_count_ar', 'm2' => 'm2_count_ar', 'm3' => 'm3_count_ar', 'grep' => 'g_count_ar' } ); cmpthese($results);