sub split_join {
my $line = shift;
my @tokens = split /[|]/, $line;
if ($tokens[15] eq 'STOCK') {
$tokens[15] = 'BOXXE';
return join('|',@tokens);
}
else {
return $line;
}
}
####
use strict;
use warnings;
use Benchmark qw(cmpthese);
my $line = ;
printf "Original: $line";
printf " split: %s",split_join($line);;
printf " simple: %s",simple_regex($line);;
cmpthese(5000, {
splitjoin => sub {split_join($line)},
simple_regex => sub {simple_regex($line)},
});
sub split_join {
my $line = shift;
my @tokens = split /[|]/, $line;
if ($tokens[15] eq 'STOCK') {
$tokens[15] = 'BOXXE';
return join('|',@tokens);
}
else {
return $line;
}
}
sub simple_regex {
my $line = shift;
#$line =~ s/^((?:[^|]*\|){15})STOCK/${1}BOXXE/;
$line =~ s{^
(
(?:
[^|]*
\|
) {15}
)
STOCK
}
{${1}BOXXE}x;
return $line;
}
__DATA__
AT0000937503|20060530|||142.708534||GROUP AG|30618720||||OPEN|ISIN|4943402|VSE|STOCK|39600000|0.77320|STOCK|test
####
Original: AT0000937503|20060530|||142.708534||GROUP AG|30618720||||OPEN|ISIN|4943402|VSE|STOCK|39600000|0.77320|STOCK|test
split: AT0000937503|20060530|||142.708534||GROUP AG|30618720||||OPEN|ISIN|4943402|VSE|BOXXE|39600000|0.77320|STOCK|test
simple: AT0000937503|20060530|||142.708534||GROUP AG|30618720||||OPEN|ISIN|4943402|VSE|BOXXE|39600000|0.77320|STOCK|test
Rate splitjoin simple_regex
splitjoin 4274/s -- -44%
simple_regex 7576/s 77% --