I'd replace
$file =~ s/\s+/_/g; with
$file =~ y/_//sd;
and here is why (this is supposed to be a well known fact)
use Benchmark qw( cmpthese );
cmpthese(
100_000,
{ 's' => sub {
$a='a _ b __ c';
$a=~s/_+//g;
},
'y' => sub {
$a='a _ b __ c';
$a=~ y/_//sd;
}
}
);
__END__
Benchmark: timing 100000 iterations of s, y...
s: 9 wallclock secs ( 7.18 usr + 0.00 sys = 7.18 CPU) @ 13
+927.58/s (n=100000)
y: 2 wallclock secs ( 2.19 usr + 0.00 sys = 2.19 CPU) @ 45
+578.85/s (n=100000)
Rate s y
s 13928/s -- -69%
y 45579/s 227% --