http://www.perlmonks.org?node_id=605733


in reply to Re^2: Problem with 'system' function in Windows Vista
in thread Problem with 'system' function in Windows Vista

Yes and no.

* — If any! When quoting is supported, it's usually double quotes. As for an escaping mechanism, I don't remember ever seeing one, so good luck trying to pass a double quote to a program...

Replies are listed 'Best First'.
Re^4: Problem with 'system' function in Windows Vista
by diotalevi (Canon) on Mar 20, 2007 at 23:32 UTC

    Escaping, when possible was usually just another doublequote: "bar ""baz" -> bar " baz.

    ⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊

      The documented MS C RTL quoting rules (that not all Win32 programs follow, unfortunately) say that to get <bar " baz> you should write <"bar \" baz">. The implementation is a bit weird, especially if you don't follow those rules. But your case doesn't work for me:

      C:\> perl -le"print '<',$_,'>' for @ARGV" "foo "" bar" <foo "> <bar> C:\>

      Note that \ only "escapes" when in a construct matching /\\+"/ (an even number of backslases results in $n-1 backslashes, an odd number in $n-1 backslashes followed by a quote).

      This pointed out a subtle bug in the "current" Perl quoting that is done:

      system( $^X, '"-leprint qq(<$_>) for @ARGV"', "\\root\\subdir\\", "\\root dir\\sub dir\\", ); produces: <\root\subdir\> <\root dir\sub dir">

      The fact that I had to quote and be careful with that second argument is the not-subtle short-coming. But the fix for it also fixes the final \ turning into a ".

      - tye