abc "a\"bc$xyz$abc$x$y" $bla'h, $blah hello k\$nob this is "\"'abc$xy$z\"" test "$" a$$bc "$$abc$xyz$abc$" blah, $$, blah #### abc "a\"bc\$xyz\$abc\$x\$y" $bla'h, $blah hello k\$nob this is "\"'abc\$xy\$z\"" test "\$" a$$bc "\$\$abc\$xyz\$abc\$" blah, $$, blah #### my $str = <<'EOS'; abc "a\"bc$xyz$abc$x$y" $bla'h, $blah hello k\$nob this is "\"'abc$xy$z\"" test "$" a$$bc "$$abc$xyz$abc$" blah, $$, blah EOS print "$str\n\n"; # $qq matches a double quoted string. my $qq = qr/"[^"\\]*(?:\\.[^"\\]*)*"/; # Break $str into fields (quoted or unquoted). my @fields = $str =~ /$qq|[^"]+/g; # Escape $ in quoted fields only. /^"/ && s/\$/\\\$/g for @fields; print @fields;