* added example using the list form of open()
* removed needless Microsoft bashing Index: perlfaq8.pod =================================================================== RCS file: /cvs/public/perlfaq/perlfaq8.pod,v retrieving revision 1.9 diff -u -d -r1.9 perlfaq8.pod --- perlfaq8.pod 21 Jun 2002 04:33:43 -0000 1.9 +++ perlfaq8.pod 21 Jun 2002 04:43:16 -0000 @@ -744,11 +744,20 @@ =head2 How can I call backticks without shell processing? -This is a bit tricky. Instead of writing +This is a bit tricky. You can't simply write the command +like this: @ok = `grep @opts '$search_string' @filenames`; -You have to do this: +As of Perl 5.8.0, you can use open() with multiple arguments. +Just like the list forms of system() and exec(), no shell +escapes happen. + + open( GREP, "-|", 'grep', @opts, $search_string, @filenames ); + chomp(@ok = <GREP>); + close GREP; + +You can also: my @ok = (); if (open(GREP, "-|")) { @@ -766,10 +775,7 @@ Note that if you're stuck on Microsoft, no solution to this vexing issue is even possible. Even if Perl were to emulate fork(), you'd still -be hosed, because Microsoft gives no argc/argv-style API. Their API -always reparses from a single string, which is fundamentally wrong, -but you're not likely to get the Gods of Redmond to acknowledge this -and fix it for you. +be stuck, because Microsoft does not have a argc/argv-style API. =head2 Why can't my script read from STDIN after I gave it EOF (^D on Unix, ^Z on MS-DOS)?