#!/usr/bin/perl use strict; use warnings; use Benchmark qw(cmpthese); my $code = { while_index => sub { # BrowserUk local $_ = $::TESTSTRING; s{(?:[^\cH]\cH|^\cH)}{}g while 1+index $_, chr(8); $_; }, altr_subst => sub { # smackdab local $_ = $::TESTSTRING; 1 while s/(?:[^\cH]\cH|^\cH+)//g; $_; }, noaltr_subst => sub { # smackdab local $_ = $::TESTSTRING; s/^\cH+//; 1 while s/[^\cH]\cH//g; $_; }, sexeger_while => sub { # shenme local $_ = reverse $::TESTSTRING; s{\cH[^\cH]|\cH$}{}g while 1+index $_, chr(8); scalar reverse $_; }, true_sexeger => sub { # Aristotle local $_ = reverse $::TESTSTRING; s/(\cH+)(??{ '.{0,'.length($1).'}' })//g; scalar reverse $_; }, substr => sub { # Aristotle local $_ = $::TESTSTRING; while(/([\b]+)/g) { my $len = 2 * length($1); substr($_, pos() - $len, $len, ''); } $_; }, }; $::TESTSTRING = "\bthis is an\b correct\b\b\b usage\b"; print "\nBenchmarking length ", length($::TESTSTRING), "\n"; cmpthese(-5, $code); $::TESTSTRING x= 100; print "\nBenchmarking length ", length($::TESTSTRING), "\n"; cmpthese(-5, $code); __END__