Looks like the split is slightly faster:
h:\>perl benchmark.pl
perl benchmark.pl
Benchmark: timing 100000 iterations of trimall_v1, trimall_v2...
trimall_v1: 13 wallclock secs (13.29 usr + 0.00 sys = 13.29 CPU)
trimall_v2: 12 wallclock secs (11.74 usr + 0.01 sys = 11.75 CPU)
Example code for testing with benchmark:
#!/usr/bin/perl -w
use strict;
use Benchmark;
my $iterations = $ARGV[0] || 100000;
timethese($iterations, {
trimall_v1 => \&try_trimall_v1,
trimall_v2 => \&try_trimall_v2,
});
sub try_trimall_v1 {
my ($val, $list) = setup();
1 for (trimall_v1($val));
1 for (trimall_v1(@{$list}));
}
sub try_trimall_v2 {
my ($val, $list) = setup();
1 for (trimall_v2($val));
1 for (trimall_v2(@{$list}));
}
sub setup {
my $val=" Scalar \r\r\n\t\t\n ";
my @list=(" List\t\t\n 1 \n \n \n"," \t\t List 2 "," List\t\
+t\t\n 3\t\n\n\r ");
return $val, \@list;
}
# Using regex
sub trimall_v1 {
# Trims all extra whitespace from left, right and middle!
my @out=@_; # Pass by value!
for (@out) {
s/^\s+//;
s/\s+$//;
s/\s+/ /g;
}
return wantarray ? @out : $out[0];
}
# Using specialized split on ' ' and $_
sub trimall_v2 {
# Trims all extra whitespace from left, right and middle!
my @out=@_; # Pass by value
for (@out) {
$_= join ' ',split;
}
return wantarray ? @out : $out[0];
}
Update: Argh ... too late ...
Christian Lemburg
Brainbench MVP for Perl
http://www.brainbench.com