in reply to [Win32] Escaping quotes in perl one liner

cmd.exe escapes double-quotes by doubling them:

perl -le "open(my $x, "">&STDOUT"");"

But usually, I prefer (for this reason) to rewrite oneliners using qq() and q(), which eliminates the need for knowing how to escape in this shell besides needing to know whether to use single or double quotes.

Replies are listed 'Best First'.
Re^2: [Win32] Escaping quotes in perl one liner
by syphilis (Archbishop) on Nov 28, 2020 at 08:30 UTC
    perl -le "open(my $x, "">&STDOUT"");"

    Not quite - but close enough ;-)
    Thank you.
    Either of the following work and, AFAICT, are equivalent - though I'm not exactly sure why that equivalence should hold:
    perl -le "open(my $x, \"">&STDOUT"\");" perl -le "open(my $x, "\">&STDOUT\"");"
    So I gather it's just the way the shell functions (as opposed to an issue with perl), that I can do:
    C:\_32>perl -Mstrict -MDevel::Peek -le "my $arg = \"STDOUT\"; Dump $ar +g;" SV = PV(0x36cd1c) at 0x44b124 REFCNT = 1 FLAGS = (POK,IsCOW,pPOK) PV = 0x451dc4 "STDOUT"\0 CUR = 6 LEN = 10 COW_REFCNT = 1
    but it blows up as soon as I introduce shell metacharacters into the string:
    C:\_32>perl -Mstrict -MDevel::Peek -le "my $arg = \">&STDOUT\"; Dump $ +arg;" >& was unexpected at this time.
    And I guess the additional quotes provide the disambiguation required to allow the one-liner to DWIM.

    Cheers,
    Rob