c:\@Work\Perl\monks>perl -wMstrict -le "my $s = '& &lt; &gt; < > &< &&'; print qq{'$s'}; ;; my %replace = ( amp => '&', lt => '<', gt => '>', ); my ($find) = map qr{ & ($_) ; }xms, join '|', keys %replace ; $s =~ s{$find}{$replace{$1}}xmsg; print qq{'$s'}; " '& &lt; &gt; < > &< &&' '& < > < > &< &&' #### c:\@Work\Perl\monks>perl -wMstrict -le "my $s = '& &lt; &gt; < > &< &&'; print qq{'$s'}; ;; my %replace = ( amp => '&', lt => '<', gt => '>', ); my ($entity) = map qr{ $_ }xms, join ' | ', keys %replace ; print $entity; ;; $s =~ s{ & ($entity) ; }{$replace{$1}}xmsg; print qq{'$s'}; " '& &lt; &gt; < > &< &&' (?^msx: lt | gt | amp ) '& < > < > &< &&'