#!/usr/bin/perl -- use strict; use warnings; use Benchmark qw(cmpthese); print "\n$]\n"; our $data; for my $range ( 1_000 , 2_000 , 10_000 , 100_000 ){ $data = join '',map { ( qw' T A C G ' )[ $_ % 4 ] } 0 .. $range; print "\n$range\n"; cmpthese (-3, { SplitAssign => \&SplitAssign, SplitRegex => \&SplitRegex, Substitution => \&Substitution, }); print "##" x 33, "\n\n"; } sub SplitAssign { my @data = split //, $data; for my $char ( @data ){ if( $char eq 'T' ){ $char = 'G'; } elsif( $char eq 'A' ){ $char = 'T'; } elsif( $char eq 'C' ){ $char = 'A'; } elsif( $char eq 'G' ){ $char = 'C'; } } my $newData = join '', @data; return; } sub SplitRegex { my @data = split //, $data; for my $char ( @data ){ if( $char eq 'T' ){ $char =~ s/T/G/; } elsif( $char eq 'A' ){ $char =~ s/A/T/; } elsif( $char eq 'C' ){ $char =~ s/C/A/; } elsif( $char eq 'G' ){ $char =~ s/G/C/; } } my $newData = join '', @data; return; } sub Substitution { my $newData = $data; $newData =~ s/(.)/ my $char = $1; if( $char eq 'T' ){ $char = 'G'; } elsif( $char eq 'A' ){ $char = 'T'; } elsif( $char eq 'C' ){ $char = 'A'; } elsif( $char eq 'G' ){ $char = 'C'; } $char; /ge; return; } __END__