From: Shlomi Fish Date: Tue, 23 Sep 2008 19:00:41 +0000 (+0300) Subject: Re: [PATCH] Add open "|-" and open "-|" to perlopentut X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=494bd33348b985a58018f4b68f5d051cf954d541;p=p5sagit%2Fp5-mst-13.2.git Re: [PATCH] Add open "|-" and open "-|" to perlopentut Message-id: <200809231900.41474.shlomif@iglu.org.il> p4raw-id: //depot/perl@34435 --- diff --git a/pod/perlopentut.pod b/pod/perlopentut.pod index 566ba0f..31fe6f2 100644 --- a/pod/perlopentut.pod +++ b/pod/perlopentut.pod @@ -165,6 +165,33 @@ If you would like to open a bidirectional pipe, the IPC::Open2 library will handle this for you. Check out L +perl-5.6.x introduced a version of piped open that executes a process +based on its command line arguments without relying on the shell. (Similar +to the C notation.) This is safer and faster than executing +a single argument pipe-command, but does not allow special shell +constructs. (It is also not supported on Microsoft Windows, Mac OS Classic +or RiscOS.) + +Here's an example of C, which prints a random Unix +fortune cookie as uppercase: + + my $collection = shift(@ARGV); + open my $fortune, '-|', 'fortune', $collection + or die "Could not find fortune - $!"; + while (<$fortune>) + { + print uc($_); + } + close($fortune); + +And this C pipes into lpr: + + open my $printer, '|-', 'lpr', '-Plp1' + or die "can't run lpr: $!"; + print {$printer} "stuff\n"; + close($printer) + or die "can't close lpr: $!"; + =head2 The Minus File Again following the lead of the standard shell utilities, Perl's