#!/usr/bin/perl -w use Benchmark qw(cmpthese); $s = "\bthis is an\b correct\b\b\b usage\b"; sub uk { $a = $s; $a =~ s[(?:[^\cH]\cH|^\cH)][]g while 1+index $a, chr(8); $a; } sub new1 { $a = $s; while ($a =~ s/(?:[^\cH]\cH|^\cH+)//g) {} $a; } sub smack { $a = $s; $a =~ s/^\cH+//; 1 while ($a =~ s/[^\cH]\cH//g); $a; } cmpthese(-5,{uk=>\&uk,new1=>\&new1,smack=>\&smack}); $s x= 100; cmpthese(-5,{uk=>\&uk,new1=>\&new1,smack=>\&smack}); Benchmark: running new1, smack, uk, each for at least 5 CPU seconds... new1: 6 wallclock secs ( 5.39 usr + 0.03 sys = 5.42 CPU) @ 11344.28/s (n=61486) smack: 6 wallclock secs ( 5.24 usr + 0.02 sys = 5.26 CPU) @ 36814.64/s (n=193645) uk: 4 wallclock secs ( 5.26 usr + 0.06 sys = 5.32 CPU) @ 13261.09/s (n=70549) Rate new1 uk smack new1 11344/s -- -14% -69% uk 13261/s 17% -- -64% smack 36815/s 225% 178% -- Benchmark: running new1, smack, uk, each for at least 5 CPU seconds... new1: 5 wallclock secs ( 5.22 usr + 0.05 sys = 5.27 CPU) @ 140.04/s (n=738) smack: 6 wallclock secs ( 5.26 usr + 0.07 sys = 5.33 CPU) @ 873.55/s (n=4656) uk: 5 wallclock secs ( 5.18 usr + 0.04 sys = 5.22 CPU) @ 176.44/s (n=921) Rate new1 uk smack new1 140/s -- -21% -84% uk 176/s 26% -- -80% smack 874/s 524% 395% --