use strict; use warnings; use Benchmark qw(cmpthese); chomp( my @lines = ); sub regExLines { my ( $yes, $no ); for my $string (@lines) { next if $string !~ /^\*.+/ or $string =~ /Created/; if ( $string =~ /^(?>\*\s+(\w\w\w-\d\d-\d\d\d\d)\s+(\w+)\s+(\d+)\s+)(?!Created)/ ) { $yes++; } else { $no++; } } } sub splitLines { my ( $yes, $no ); for my $string (@lines) { next if $string !~ /^\*.+/ or $string =~ /Created/; my ( undef, $date, $user, $change, $desc ) = split ' ', $string, 5; if ( $desc !~ /^Created/ ) { $yes++; } else { $no++; } } } cmpthese( -5, { regExLines => sub { regExLines() }, splitLines => sub { splitLines() }, } ); # Rate regExLines splitLines #splitLines 356059/s -- -6% #regExLines 377659/s 6% -- __DATA__ * JAN-01-2001 bugsbunny 1234 Created Module JAN-01-2001 bugsbunny 1234 Created Module * DEC-12-2012 bugsbunny 5678 Modified Module DEC-12-2012 bugsbunny 5678 Modified Module