$find = '$a'; $find = quotemeta $find; $replace = '$b'; $str = '($a $a hi) $a (($a) $a'; $str =~ s[(\([^)]*$find)|$find] [$1 ? $1 : $replace ]eg; print $str;