sub blah { $_ = shift; s/ä/ae/g; s/Ä/AE/g; s/ö/oe/g; s/Ö/OE/g; s/ü/ue/g; s/Ü/UE/g; s/ß/ss/g; $_ } #### $tstr = 'abc äÄöÖüÜß test'; %subsTable = ( 'ä' => 'ae', 'Ä' => 'AE', 'ö' => 'oe', 'Ö' => 'OE', 'ü' => 'ue', 'Ü' => 'UE', 'ß' => 'ss' ); $notInSQL = qr{'|`|´|"|,|%|$}; $inSQL = qr{`|´|"|,|$}; sub blah { my $str = shift; my $regex = join "|", map quotemeta, keys %subsHash; print $regex,"\n"; $regex = qr/$regex/; $str =~ s/($regex)/$subsHash{$1}/g; # if ($str =~ /^\s*(SELECT|INSERT|UPDATE|DELETE)/i ) { $str =~ s/$inSQL/ /g } # else { $str =~ s/$notInSQL/ /g }; #may be have to use tr/// here return $str }; print "orig : $tstr\n"; print blah($tstr)."\n";