You should consider using s/\D+//g, as that's
often a lot faster than s/\D//g. Here's a benchmark:
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark;
my @sizes = (10, 25, 50, 100, 250, 500, 1000);
my @chars = ('A' .. 'Z', 'a' .. 'z', 0 .. 9);
our @d = map {join "" => map {$chars [rand @chars]} 1 .. $_} @sizes;
map {
Benchmark::cmpthese timethese (-2 => {
"simple_$sizes[$_]" => '$_ = $::d[' . $_ . ']; s/\D//g;',
"multiple_$sizes[$_]" => '$_ = $::d[' . $_ . ']; s/\D+//g;'
}, 'none');
} 0 .. $#sizes
__END__
Rate simple_10 multiple_10
simple_10 196495/s -- -15%
multiple_10 231225/s 18% --
Rate simple_25 multiple_25
simple_25 89788/s -- -50%
multiple_25 180650/s 101% --
Rate simple_50 multiple_50
simple_50 47507/s -- -64%
multiple_50 130727/s 175% --
Rate simple_100 multiple_100
simple_100 23206/s -- -77%
multiple_100 103096/s 344% --
Rate simple_250 multiple_250
simple_250 10488/s -- -71%
multiple_250 36407/s 247% --
Rate simple_500 multiple_500
simple_500 5046/s -- -75%
multiple_500 20382/s 304% --
Rate simple_1000 multiple_1000
simple_1000 2528/s -- -76%
multiple_1000 10549/s 317% --
Abigail
|