#! perl -slw use strict; use Benchmark qw[ cmpthese ]; my %subst = ( '&' => 'amp', '>' => 'gt', '<' => 'lt' ); our $ysth = join('|', map quotemeta, sort { length($b) <=> length($a) || $b cmp $a } keys %subst); our $N ||= 1e3; our $data = join( '', map{ 'junk ' . (qw[ & < > ])[ rand 3 ] } 1 .. $N ); cmpthese -3, { OP => sub { $_ = $data; s{\&}{amp}g; s{\<}{lt}g; s{\>}{gt}g }, tye => sub { $_ = $data; s{([&<>])}{$subst{$1}}ge; }, ysth => sub { $_ = $data; s{($ysth)}{$subst{$1}}ge; }, buk => sub { $_ = $data . ' '; $_ = join 'amp', split '&'; $_ = join 'lt', split '<'; $_ = join 'gt', split '>'; chop; }, };