use strict; use warnings; use Time::HiRes 'time'; my $str; $str .= chr 97 + rand 2 for 1 .. 5e3; { my $n = 0; my $s = $str; my $t = time; $n ++ while $s =~ s/((.)(?1)?\2)//g; printf qq(%3d loops, %.3f s, result: "%s"\n), $n, time - $t, $s } { my $n = 0; my $s = $str; my $t = time; $n ++ while $s =~ s/(.)\1//g; printf qq(%3d loops, %.3f s, result: "%s"\n), $n, time - $t, $s } # 4 loops, 1.542 s, result: "babababa" # 47 loops, 0.001 s, result: "babababa"