#! perl -slw use strict; use Math::Random::MT qw[ rand ]; use Benchmark qw[ cmpthese ]; our $data = join '', map { sprintf '%-25s%15d', 'X' x int( rand 25 ) , int( rand 2**32 ) } 1 .. 125; ## extract 6 pairs at positions 3rd, 33rd, 50th, 75th, 100th 123rd my $pair = 'A25 A15'; our $tmpl = "x[($pair)2] $pair x[($pair)29] $pair x[($pair)16] $pair" . "x[($pair)24] $pair x[($pair)24] $pair x[($pair)22] $pair "; cmpthese -3, { regex => q[ our $data; my @sixPair = ( $data =~ m[(.{25})(.{15})]g )[ 5, 6, 65, 66, 99, 100, 149, 150, 199, 200, 245,246 ]; ], unpack=> q[ our( $data, $tmpl ); my @sixPair = unpack $tmpl, $data ], }; cmpthese 1, { regex => q[ our $data; my @sixPair = ( $data =~ m[(.{25})(.{15})]g )[ 4,5, 64,65, 98,99, 148,149, 198,199, 244,245 ]; print 'regex ', join '|', @sixPair; ], unpack=> q[ our( $data, $tmpl ); my @sixPair = unpack $tmpl, $data; print 'unpack ', join '|', @sixPair; ], }; __END__ C:\test>junk4 Rate regex unpack regex 3311/s -- -91% unpack 38783/s 1071% -- regex XXXXXXXXXXXXXXXXXXXXXX | 189677339| XXXXXXX | 966124187| XXXXXXXXXXX | -1269554066| XXXXX | -1916129141| XXXXXXXXXXXXXXX | -479254076| XXXXXXXXXXXXXXXXX | 335028423 unpack XXXXXXXXXXXXXXXXXXXXXX| 189677339| XXXXXXX| 966124187| XXXXXXXXXXX| -1269554066| XXXXX| -1916129141| XXXXXXXXXXXXXXX| -479254076| XXXXXXXXXXXXXXXXX| 335028423