$_ = 'taxial'; my %subst = ( 'taxi' => 'cab', 'cabal' => 'gang' ); local $" = "|"; my @keys = map quotemeta, sort { length $b <=> length $a } keys %subst; my $regexp = qr(@keys); s/($regexp)/$subst{$1}/g; print;