Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re^2: system() implementation on Windows (again)

by Anonymous Monk
on Aug 19, 2011 at 13:13 UTC ( #921238=note: print w/ replies, xml ) Need Help??


in reply to Re: system() implementation on Windows (again)
in thread system() implementation on Windows (again)

Yes, tried that. And guess what... I get arguments split (by spaces) before the executable specified in the system() call is run.

So if this is the content of my "main" perl script:

my $txt = '/w my > text >= [with] \ symbols " /wabc/def (xyz)'; system($^X, 'joined-echo.pl', $txt, 'ARG2');

...Then this is the output:

/w||my||>||text||>=||[with]||\||symbols|| /wabc/def (xyz) ARG2

As one can see, the perl called by system() does not get 2 arguments - as I would expect - but much more. Mhmm.


Comment on Re^2: system() implementation on Windows (again)
Select or Download Code
Re^3: system() implementation on Windows (again)
by Anonymous Monk on Aug 19, 2011 at 14:18 UTC

    See exec always invokes the shell? win32, the situation is brainfuck-cubed

    The way I get around it, is to always pretend like I'm typing in cmd.exe

    #!/usr/bin/perl -- use strict; use warnings; if( @ARGV ){ print join "\n", map({"( $_ )"} @ARGV), "\n"; } else { my $txt = '/w my > text >= [with] \ symbols " /wabc/def (xyz)'; my( @args ) = win32_quote( 'perl', __FILE__, $txt, 'ARG2', ); print "YOU CAN TYPE THIS AT THE cmd.exe PROMPT\n @args\n\n"; ## command.com doesn't like it (it wants "perl" to be perl) ## i don't know what powershell does :) system @args; } sub win32_quote { my( @args ) = @_; s~ ( [%><|&^"] ) ~ { '%' => '^%', '>' => '^>', '<' => '^<', '"' => '\\"', '&' => '^&', '|' => '^|', }->{$1} ~gex for @args; $_=qq["$_"] for @args; return @args; } __END__ D:\>perl win32.quote.pl YOU CAN TYPE THIS AT THE cmd.exe PROMPT "perl" "win32.quote.pl" "/w my ^> text ^>= [with] \ symbols \" /wab +c/def (xyz)" "ARG2" ( /w my ^> text ^>= [with] \ symbols " /wabc/def (xyz) ) ( ARG2 ) D:\>"perl" "win32.quote.pl" "/w my ^> text ^>= [with] \ symbols \" /wa +bc/def (xyz)" "ARG2" ( /w my ^> text ^>= [with] \ symbols " /wabc/def (xyz) ) ( ARG2 )

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://921238]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (9)
As of 2014-08-23 08:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (172 votes), past polls