allow C<select('foo')> to autovivify *foo (SelectSaver expects that)
Gurusamy Sarathy [Sun, 14 Feb 1999 10:25:55 +0000 (10:25 +0000)]
p4raw-id: //depot/perl@2914

op.c
pod/perldiag.pod
pp_sys.c
t/op/misc.t

diff --git a/op.c b/op.c
index 9e4f084..7ccfe16 100644 (file)
--- a/op.c
+++ b/op.c
@@ -1401,6 +1401,7 @@ is_handle_constructor(OP *o, I32 argnum)
        /* FALL THROUGH */
     case OP_SYSOPEN:
     case OP_OPEN:
+    case OP_SELECT:            /* XXX c.f. SelectSaver.pm */
     case OP_SOCKET:
     case OP_OPEN_DIR:
     case OP_ACCEPT:
index c303c00..eb84876 100644 (file)
@@ -2323,11 +2323,6 @@ was either never opened or has since been closed.
 
 (F) This machine doesn't implement the select() system call.
 
-=item select() on unopened file
-
-(W) You tried to use the select() function on a filehandle that
-was either never opened or has since been closed.
-
 =item sem%s not implemented
 
 (F) You don't have System V semaphore IPC on your system.
index e4694bc..a35a206 100644 (file)
--- a/pp_sys.c
+++ b/pp_sys.c
@@ -1003,13 +1003,8 @@ PP(pp_select)
     }
 
     if (newdefout) {
-       if (!GvIO(newdefout)) {
-           if (ckWARN(WARN_UNOPENED))
-               warner(WARN_UNOPENED, "select() on unopened file");
-           if (SvTYPE(newdefout) != SVt_PVGV)
-               RETURN;
-           gv_IOadd(newdefout);        /* XXX probably bogus */
-       }
+       if (!GvIO(newdefout))
+           gv_IOadd(newdefout);
        setdefout(newdefout);
     }
 
index 778476e..acef29d 100755 (executable)
@@ -414,13 +414,7 @@ destroyed
 package X;
 sub any { bless {} }
 my $f = "FH000"; # just to thwart any future optimisations
-sub afh {
-    open(++$f, '>&STDOUT') or die;
-    select select $f;
-    my $r = *{$f}{IO};
-    delete $X::{$f};
-    bless $r;
-}
+sub afh { select select ++$f; my $r = *{$f}{IO}; delete $X::{$f}; bless $r }
 sub DESTROY { print "destroyed\n" }
 package main;
 $x = any X; # to bump sv_objcount. IO objs aren't counted??