deprecate package with no arguments
Robin Houston [Tue, 10 Jul 2001 13:33:40 +0000 (14:33 +0100)]
Message-ID: <20010710133340.A13452@robin.kitsite.com>

p4raw-id: //depot/perl@11256

op.c
pod/perldiag.pod
pod/perlfunc.pod
t/lib/warnings/op

diff --git a/op.c b/op.c
index 1790fd6..baa62fb 100644 (file)
--- a/op.c
+++ b/op.c
@@ -3197,6 +3197,7 @@ Perl_package(pTHX_ OP *o)
        op_free(o);
     }
     else {
+       deprecate("\"package\" with no arguments");
        sv_setpv(PL_curstname,"<none>");
        PL_curstash = Nullhv;
     }
index c754333..65cde01 100644 (file)
@@ -3868,6 +3868,13 @@ In code that currently says C<use AutoLoader; @ISA = qw(AutoLoader);>
 you should remove AutoLoader from @ISA and change C<use AutoLoader;> to
 C<use AutoLoader 'AUTOLOAD';>.
 
+=item Use of "package" with no arguments is deprecated
+
+(D deprecated) You used the C<package> keyword without specifying a package
+name. So no namespace is current at all. Using this can cause many
+otherwise reasonable constructs to fail in baffling ways. C<use strict;>
+instead.
+
 =item Use of %s in printf format not supported
 
 (F) You attempted to use a feature of printf that is accessible from
index 1039cd0..6deeadb 100644 (file)
@@ -3404,8 +3404,10 @@ C<$::sail> is equivalent to C<$main::sail> (as well as to C<$main'sail>,
 still seen in older code).
 
 If NAMESPACE is omitted, then there is no current package, and all
-identifiers must be fully qualified or lexicals.  This is stricter
-than C<use strict>, since it also extends to function names.
+identifiers must be fully qualified or lexicals.  However, you are
+strongly advised not to make use of this feature. Its use can cause
+unexpected behaviour, even crashing some versions of Perl. It is
+deprecated, and will be removed from a future release.
 
 See L<perlmod/"Packages"> for more information about packages, modules,
 and classes.  See L<perlsub> for other scoping issues.
index 0079146..d3a2d54 100644 (file)
        mkdir "foo", 777;
        umask 222;
 
+     Use of "package" with no arguments is deprecated
+       package;
+
     Mandatory Warnings 
     ------------------
     Prototype mismatch:                [cv_ckproto]
@@ -958,3 +961,11 @@ mkdir "", 777;
 EXPECT
 Non-octal literal mode (777) specified at - line 3.
        (Did you mean 0777 instead?)
+########
+# op.c
+use warnings 'deprecated' ;
+package;
+no warnings 'deprecated' ;
+package;
+EXPECT
+Use of "package" with no arguments is deprecated at - line 3.