#!/usr/bin/perl use strict; use warnings; use Benchmark qw(:all) ; # Set up an array of data to test my $data = '0906928472847292INR~UTRIR8709990166~ 700000~INR~20080623~RC425484~IFSCSEND001 ~Remiter Details ~1000007 ~TEST RTGS TRF7 ~ ~ ~ ~RTGS~REVOSN OIL CORPORATION ~IOCL ~09065010889~0906501088900122INR~ 7~ 1~ 1'; my @data; push @data, $data for 1 .. 1000; cmpthese( 1000, { 'Full split' => sub {my @refnos; for (@data){my @splitted = split(/~/,$_); push(@refnos,$splitted[1]);}}, 'Limited split' => sub {my @refnos; for (@data){my @splitted = split(/~/,$_,3); push(@refnos,$splitted[1]);}}, 'Optimized split' => sub {my @refnos; for (@data){push @refnos, (split(/~/,$_,3))[1];}}, 'regex' => sub {my @refnos; for (@data){push @refnos, /~([^~]+)~/;}}, } ); #### Rate Full split Limited split Optimized split regex Full split 23.3/s -- -81% -90% -91% Limited split 120/s 413% -- -51% -54% Optimized split 244/s 946% 104% -- -7% regex 262/s 1024% 119% 7% --