Move the autovivification emulation code to the top of IPC::Open3::_open3().
authorNicholas Clark <nick@ccl4.org>
Mon, 6 Jun 2011 12:43:56 +0000 (14:43 +0200)
committerNicholas Clark <nick@ccl4.org>
Sat, 11 Jun 2011 06:48:14 +0000 (08:48 +0200)
This avoids having to re-assign to the scalars $dad_wtr and $dad_rdr.

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

index 916fd84..890cc70 100644 (file)
@@ -199,19 +199,14 @@ use constant DO_SPAWN => $^O eq 'os2' || $^O eq 'MSWin32' || FORCE_DEBUG_SPAWN;
 
 sub _open3 {
     local $Me = shift;
-    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 '-'"
-    }
 
     # simulate autovivification of filehandles because
     # it's too ugly to use @_ throughout to make perl do it for us
     # tchrist 5-Mar-00
 
     unless (eval  {
-       $dad_wtr = $_[0] = gensym unless defined $dad_wtr && length $dad_wtr;
-       $dad_rdr = $_[1] = gensym unless defined $dad_rdr && length $dad_rdr;
+       $_[0] = gensym unless defined $_[0] && length $_[0];
+       $_[1] = gensym unless defined $_[1] && length $_[1];
        1; })
     {
        # must strip crud for croak to add back, or looks ugly
@@ -219,6 +214,12 @@ sub _open3 {
        croak "$Me: $@";
     }
 
+    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 '-'"
+    }
+
     $dad_err ||= $dad_rdr;
 
     $dup_wtr = ($dad_wtr =~ s/^[<>]&//);