This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #95550] Remove prototypes from (l)stat
authorFather Chrysostomos <sprout@cpan.org>
Tue, 26 Jul 2011 16:53:15 +0000 (09:53 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 26 Jul 2011 16:53:15 +0000 (09:53 -0700)
These prototypes are not correct, and the parsing rules cannot be repre-
sented by a prototype.

op.c
pod/perldelta.pod
t/op/cproto.t

diff --git a/op.c b/op.c
index d44b6a2..e217dcd 100644 (file)
--- a/op.c
+++ b/op.c
@@ -10225,8 +10225,8 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const STRLEN len,
     case KEY_and   : case KEY_chop: case KEY_chomp:
     case KEY_cmp   : case KEY_exec: case KEY_eq   :
     case KEY_ge    : case KEY_gt  : case KEY_le   :
-    case KEY_lt    : case KEY_ne  : case KEY_or   :
-    case KEY_system: case KEY_x   : case KEY_xor  :
+    case KEY_lstat : case KEY_lt  : case KEY_ne   : case KEY_or :
+    case KEY_stat  : case KEY_system: case KEY_x  : case KEY_xor:
        return NULL;
     case KEY_keys: case KEY_values: case KEY_each:
        retsetpvs("+");
index dea6dee..23db586 100644 (file)
@@ -381,6 +381,12 @@ was just wrong.
 
 =item *
 
+The prototypes for the core functions C<stat> and C<lstat> have been
+removed, as they were incorrect, because their syntax cannot be replicated
+by Perl subroutines.
+
+=item *
+
 Most dereferencing operators (C<${}>, etc.) used to call C<FETCH> twice on
 a tied operand when doing a symbolic dereference (looking up a variable by
 name, which is not permitted under C<use strict 'refs'>).  Only C<&{}> did
index 4863d2e..da6380f 100644 (file)
@@ -136,7 +136,7 @@ local undef
 localtime (;$)
 lock (\[$@%*])
 log (_)
-lstat (*)
+lstat undef
 lt undef
 m undef
 map undef
@@ -223,7 +223,7 @@ split undef
 sprintf ($@)
 sqrt (_)
 srand (;$)
-stat (*)
+stat undef
 state undef
 study undef
 sub undef