From: Manuel Valente Date: Tue, 27 Jan 2004 19:18:26 +0000 (+0100) Subject: Patch for Shell.pm X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=c4a2e7a54bf494cff88f7c7c033f6b017d36f653;p=p5sagit%2Fp5-mst-13.2.git Patch for Shell.pm Message-Id: <4016AB72.1080503@idealx.com> New option for Shell.pm to discard stderr instead of capturing it p4raw-id: //depot/perl@22254 --- diff --git a/lib/Shell.pm b/lib/Shell.pm index e300d79..7618cc1 100644 --- a/lib/Shell.pm +++ b/lib/Shell.pm @@ -4,7 +4,7 @@ use strict; use warnings; our($capture_stderr, $VERSION, $AUTOLOAD); -$VERSION = '0.5'; +$VERSION = '0.5.1'; sub new { bless \my $foo, shift } sub DESTROY { } @@ -28,11 +28,14 @@ sub AUTOLOAD { shift if ref $_[0] && $_[0]->isa( 'Shell' ); my $cmd = $AUTOLOAD; $cmd =~ s/^.*:://; + $Shell::capture_stderr ||= 0; eval <<"*END*"; sub $AUTOLOAD { shift if ref \$_[0] && \$_[0]->isa( 'Shell' ); if (\@_ < 1) { - \$Shell::capture_stderr ? `$cmd 2>&1` : `$cmd`; + \$Shell::capture_stderr == 1 ? `$cmd 2>&1` : + \$Shell::capture_stderr == -1 ? `$cmd 2>/dev/null` : + `$cmd`; } elsif ('$^O' eq 'os2') { local(\*SAVEOUT, \*READ, \*WRITE); @@ -84,7 +87,8 @@ sub AUTOLOAD { \$_ = \$_; } } - push \@arr, '2>&1' if \$Shell::capture_stderr; + push \@arr, '2>&1' if \$Shell::capture_stderr == 1; + push \@arr, '2>/dev/null' if \$Shell::capture_stderr == -1; open(SUBPROC, join(' ', '$cmd', \@arr, '|')) or die "Can't exec $cmd: \$!\\n"; if (wantarray) { @@ -154,6 +158,9 @@ Larry If you set $Shell::capture_stderr to 1, the module will attempt to capture the STDERR of the process as well. +If you set $Shell::capture_stderr to -1, the module will discard the +STDERR of the process. + The module now should work on Win32. Jenda