#!/usr/bin/perl use strict; use warnings; use Benchmark () ; # Gather in the data my @input = ; # Extracting the 'UTR' print "Testing the 'UTR' extraction\n" ; for (@input) { my $r_s = by_split() ; my $r_a = by_regex_a() ; my $r_b = by_regex_b() ; my $r_i = by_index() ; my $s = "" ; if ($r_a ne $r_s) { $s .= " BUT \$r_a='$r_a'" ; } ; if ($r_b ne $r_s) { $s .= " BUT \$r_b='$r_b'" ; } ; if ($r_i ne $r_s) { $s .= " BUT \$r_i='$r_i'" ; } ; print " $r_s", ($s ? $s : " OK"), "\n" ; } ; Benchmark::timethese(400000, { 'Split ' => sub { by_split() for (@input) ; }, 'Regex_a' => sub { by_regex_a() for (@input) ; }, 'Regex_b' => sub { by_regex_b() for (@input) ; }, 'Index ' => sub { by_index() for (@input) ; }, }); sub by_split { my @data = split(/~/, $_) ; return $data[1] ; } ; sub by_regex_a { m/~(.*?)~/ ; return $1 ; } ; sub by_regex_b { m/~([^~]*)~/ ; return $1 ; } ; sub by_index { my $i = index($_, '~') + 1 ; return substr($_, $i, index($_, '~', $i) - $i) ; } ; # Testing for existing 'UTR' my @received = map by_split(), @input ; my @sentUTRs = ('ffsdahgdf', 'hjgfsdfghgaghsfd', $received[3], 'ppuiwdwsc', '4155dvcs7', $received[1]) ; my %sentUTRs ; @sentUTRs{@sentUTRs} = undef ; Benchmark::timethese(200000, { 'Split Grep' => sub { for (@input) { my $r = by_split() ; next if grep($r =~ /$_/, @sentUTRs) ; $r .= $r ; } ; }, 'Split Hash' => sub { for (@input) { my $r = by_split() ; next if exists $sentUTRs{$r} ; $r .= $r ; } ; }, 'Index Grep' => sub { for (@input) { my $r = by_index() ; next if grep($r =~ /$_/, @sentUTRs) ; $r .= $r ; } ; }, 'Index Hash' => sub { for (@input) { my $r = by_index() ; next if exists $sentUTRs{$r} ; $r .= $r ; } ; }, }); __DATA__ 0906928472847292INR~UTRIR8709990166~ 700000~INR~20080623~RC425484~IFSCSEND001 ~Remiter Details ~1000007 ~TEST RTGS TRF7 ~ ~ ~ ~RTGS~REVOSN OIL CORPORATION ~IOCL ~09065010889~0906501088900122INR~ 7~ 1~ 1 0906472983472834HJR~UTRIN9080980866~ 1222706~INR~20080623~NI209960~AMEX0888888 ~FRAGNOS EXPRESS - TRS CARD S DIVISI~4578962 ~/BNF/9822644928 ~ ~ ~ ~NEFT~REVOSN OIL CORPORATION ~IO CL ~09065010889~0906501088900122INR~ 7~ 1~ 1 0906568946748922INR~ZP HLHLKJ87 ~ 1437865.95~INR~20080623~NI209969~HSBC0560002 ~MOTOSPECT UNILEVER LIMITED ~1234567 ~/INFO/ATTN: ~//REF 1104210 PLEASE FIND THE DET ~ ~ ~NEFT~REVOSN OIL CORPORATION ~IOCL ~09065010889~0906501088900122INR~ 7~ 1~ 1 0906506749056822INR~Q08709798905745~ 5960.74~INR~20080623~NI209987~ ~SDV AIR LINK REVOS LIMITED ~458ss453 ~ ~ ~ ~ ~NEFT~REVOSN OIL CORPORATION ~IOCL ~09065010889~0906501088900122INR~ 7~ 1~ 1 0906503389054302INR~UTRI790898U0166~ 2414~INR~20080623~NI209976~ ~FRAGNOS EXPRESS - TRS CARD S DIVISI~ ~/BNF/9826805798 ~ ~ ~ ~NEFT~REVOSN OIL CORPORATION ~IOCL ~09065010889~0906501088900122INR~ 7~ 1~ 1