$var = 'abc'; $var =~ s/b//; # $var is now 'ac' $var =~ s/b//; # still 'ac' even before the s/// $var =~ s/b//; # yet another attempt to remove 'b' from 'ac' $var =~ s/b//; # well, you get the point.... .... etc. #### #!/usr/bin/perl -wT use strict; use Benchmark; our $var; $var = '\a\\aa\\\aaa\\\\aaaa'x100; ## rerun the original benchmarks to provide a baseline timethese(100000, { 'old s' => sub { $var =~ s/\\//g }, 'old tr' => sub { $var =~ tr/\\//d }, }); ## try some new benchmarks that reinitialize $var each time timethese(50000, { 'new s' => sub { $var = '\a\\aa\\\aaa\\\\aaaa'x100; $var =~ s/\\//g }, 'new tr' => sub { $var = '\a\\aa\\\aaa\\\\aaaa'x100; $var =~ tr/\\//d }, }); =OUTPUT Benchmark: timing 100000 iterations of old s, old tr... old s: 1 wallclock secs ( 0.56 usr + 0.00 sys = 0.56 CPU) @ 178571.43/s (n=100000) old tr: 2 wallclock secs ( 1.23 usr + 0.00 sys = 1.23 CPU) @ 81300.81/s (n=100000) Benchmark: timing 50000 iterations of new s, new tr... new s: 43 wallclock secs (30.81 usr + 0.02 sys = 30.83 CPU) @ 1621.80/s (n=50000) new tr: 3 wallclock secs ( 2.06 usr + 0.00 sys = 2.06 CPU) @ 24271.84/s (n=50000)