This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Refactor IPC::Open3::_open3() to find the caller's package itself.
authorNicholas Clark <nick@ccl4.org>
Mon, 6 Jun 2011 12:29:19 +0000 (14:29 +0200)
committerNicholas Clark <nick@ccl4.org>
Sat, 11 Jun 2011 06:48:14 +0000 (08:48 +0200)
Previously it was passed in as a parameter by IPC::Open2::open2() and
IPC::Open3::open3(), each of which used C<calller> to find it. Move the use of
caller to one place.

It would also be possible to use C<caller> to eliminate the first parameter to
_open3(), but this would add more code than it removes, so doesn't seem wise.

ext/IPC-Open2/lib/IPC/Open2.pm
ext/IPC-Open3/lib/IPC/Open3.pm

index 5f555bc..9e27144 100644 (file)
@@ -6,7 +6,7 @@ our ($VERSION, @ISA, @EXPORT);
 require 5.000;
 require Exporter;
 
-$VERSION       = 1.03;
+$VERSION       = 1.04;
 @ISA           = qw(Exporter);
 @EXPORT                = qw(open2);
 
@@ -114,8 +114,7 @@ require IPC::Open3;
 
 sub open2 {
     local $Carp::CarpLevel = $Carp::CarpLevel + 1;
-    return IPC::Open3::_open3('open2', scalar caller,
-                               $_[1], $_[0], '>&STDERR', @_[2 .. $#_]);
+    return IPC::Open3::_open3('open2', $_[1], $_[0], '>&STDERR', @_[2 .. $#_]);
 }
 
 1
index 879b902..916fd84 100644 (file)
@@ -199,9 +199,8 @@ use constant DO_SPAWN => $^O eq 'os2' || $^O eq 'MSWin32' || FORCE_DEBUG_SPAWN;
 
 sub _open3 {
     local $Me = shift;
-    my($package, $dad_wtr, $dad_rdr, $dad_err, @cmd) = @_;
+    my($dad_wtr, $dad_rdr, $dad_err, @cmd) = @_;
     my($dup_wtr, $dup_rdr, $dup_err, $kidpid);
-
     if (@cmd > 1 and $cmd[0] eq '-') {
        croak "Arguments don't make sense when the command is '-'"
     }
@@ -211,8 +210,8 @@ sub _open3 {
     # tchrist 5-Mar-00
 
     unless (eval  {
-       $dad_wtr = $_[1] = gensym unless defined $dad_wtr && length $dad_wtr;
-       $dad_rdr = $_[2] = gensym unless defined $dad_rdr && length $dad_rdr;
+       $dad_wtr = $_[0] = gensym unless defined $dad_wtr && length $dad_wtr;
+       $dad_rdr = $_[1] = gensym unless defined $dad_rdr && length $dad_rdr;
        1; })
     {
        # must strip crud for croak to add back, or looks ugly
@@ -227,6 +226,7 @@ sub _open3 {
     $dup_err = ($dad_err =~ s/^[<>]&//);
 
     # force unqualified filehandles into caller's package
+    my $package = caller 1;
     $dad_wtr = qualify $dad_wtr, $package unless fh_is_fd($dad_wtr);
     $dad_rdr = qualify $dad_rdr, $package unless fh_is_fd($dad_rdr);
     $dad_err = qualify $dad_err, $package unless fh_is_fd($dad_err);
@@ -378,7 +378,7 @@ sub open3 {
        local $" = ', ';
        croak "open3(@_): not enough arguments";
     }
-    return _open3 'open3', scalar caller, @_
+    return _open3 'open3', @_
 }
 
 sub spawn_with_handles {