In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/1178d2cf03fa59bca77887516dd7d996bb17357c?hp=e81c4bddb20ee382f91769de9a783a3a2a3b0489>

- Log -----------------------------------------------------------------
commit 1178d2cf03fa59bca77887516dd7d996bb17357c
Author: Dagfinn Ilmari Mannsåker <ilm...@ilmari.org>
Date:   Sun Jun 8 01:37:32 2014 +0100

    Disallow importing functions from UNIVERSAL
    
    It's been deprecated since v5.12.
-----------------------------------------------------------------------

Summary of changes:
 lib/UNIVERSAL.pm  | 29 ++++++++---------------------
 pod/perldelta.pod |  6 ++++++
 t/op/universal.t  | 26 +++++++++-----------------
 t/uni/universal.t | 12 +-----------
 4 files changed, 24 insertions(+), 49 deletions(-)

diff --git a/lib/UNIVERSAL.pm b/lib/UNIVERSAL.pm
index 1adf09c..2f16cb5 100644
--- a/lib/UNIVERSAL.pm
+++ b/lib/UNIVERSAL.pm
@@ -1,27 +1,18 @@
 package UNIVERSAL;
 
-our $VERSION = '1.11';
+our $VERSION = '1.12';
 
 # UNIVERSAL should not contain any extra subs/methods beyond those
-# that it exists to define. The use of Exporter below is a historical
-# accident that can't be fixed without breaking code.  Note that we
-# *don't* set @ISA here, as we don't want all classes/objects inheriting from
-# Exporter.  It's bad enough that all classes have a import() method
-# whenever UNIVERSAL.pm is loaded.
-require Exporter;
-@EXPORT_OK = qw(isa can VERSION);
+# that it exists to define. The existence of import() below is a historical
+# accident that can't be fixed without breaking code.
 
 # Make sure that even though the import method is called, it doesn't do
 # anything unless called on UNIVERSAL.
 sub import {
     return unless $_[0] eq __PACKAGE__;
     return unless @_ > 1;
-    require warnings;
-    warnings::warnif(
-      'deprecated',
-      'UNIVERSAL->import is deprecated and will be removed in a future perl',
-    );
-    goto &Exporter::import;
+    require Carp;
+    Carp::croak("UNIVERSAL does not export anything");
 }
 
 1;
@@ -190,13 +181,9 @@ available to your program (and you should not do so).
 
 =head1 EXPORTS
 
-None by default.
+None.
 
-You may request the import of three functions (C<isa>, C<can>, and C<VERSION>),
-B<but this feature is deprecated and will be removed>.  Please don't do this in
-new code.
-
-For example, previous versions of this documentation suggested using C<isa> as
+Previous versions of this documentation suggested using C<isa> as
 a function to determine the type of a reference:
 
   use UNIVERSAL 'isa';
@@ -204,7 +191,7 @@ a function to determine the type of a reference:
   $yes = isa $h, "HASH";
   $yes = isa "Foo", "Bar";
 
-The problem is that this code will I<never> call an overridden C<isa> method in
+The problem is that this code would I<never> call an overridden C<isa> method 
in
 any class.  Instead, use C<reftype> from L<Scalar::Util> for the first case:
 
   use Scalar::Util 'reftype';
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index ef88d0b..c4aab84 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -45,6 +45,12 @@ XXX For a release on a stable branch, this section aspires 
to be:
 
 [ List each incompatible change as a =head2 entry ]
 
+=head2 S<C<use UNIVERSAL '...'>> is now a fatal error
+
+Importing functions from C<UNIVERSAL> has been deprecated since v5.12, and
+is now a fatal error.  S<C<"use UNIVERSAL">> without any arguments is still
+allowed.
+
 =head1 Deprecations
 
 XXX Any deprecated features, syntax, modules etc. should be listed here.
diff --git a/t/op/universal.t b/t/op/universal.t
index 50d1782..494bc99 100644
--- a/t/op/universal.t
+++ b/t/op/universal.t
@@ -10,7 +10,7 @@ BEGIN {
     require "./test.pl";
 }
 
-plan tests => 144;
+plan tests => 143;
 
 $a = {};
 bless $a, "Bob";
@@ -137,12 +137,10 @@ ok ! (eval { aversion->VERSION(2.719) });
 like $@, qr/^Invalid version format/;
 
 my $subs = join ' ', sort grep { defined &{"UNIVERSAL::$_"} } keys 
%UNIVERSAL::;
-## The test for import here is *not* because we want to ensure that UNIVERSAL
-## can always import; it is an historical accident that UNIVERSAL can import.
 if ('a' lt 'A') {
-    is $subs, "can import isa DOES VERSION";
+    is $subs, "can isa DOES VERSION";
 } else {
-    is $subs, "DOES VERSION can import isa";
+    is $subs, "DOES VERSION can isa";
 }
 
 ok $a->isa("UNIVERSAL");
@@ -178,16 +176,6 @@ ok ! $a->can("export_tags");       # a method in Exporter
 ok ! UNIVERSAL::isa("\xff\xff\xff\0", 'HASH');
 
 {
-    package Pickup;
-    no warnings "deprecated";
-    use UNIVERSAL qw( isa can VERSION );
-
-    ::ok isa "Pickup", UNIVERSAL;
-    ::cmp_ok can( "Pickup", "can" ), '==', \&UNIVERSAL::can;
-    ::ok VERSION "UNIVERSAL" ;
-}
-
-{
     # test isa() and can() on magic variables
     "Human" =~ /(.*)/;
     ok $1->isa("Human");
@@ -274,11 +262,15 @@ use warnings "deprecated";
     my $m;
     local $SIG{__WARN__} = sub { $m = $_[0] };
     eval "use UNIVERSAL 'can'";
-    like($m, qr/^UNIVERSAL->import is deprecated/,
-       "deprecation warning for UNIVERSAL->import('can')");
+    like($@, qr/^UNIVERSAL does not export anything\b/,
+       "error for UNIVERSAL->import('can')");
+    is($m, undef,
+       "no deprecation warning for UNIVERSAL->import('can')");
 
          undef $m;
     eval "use UNIVERSAL";
+    is($@, "",
+       "no error for UNIVERSAL->import");
     is($m, undef,
        "no deprecation warning for UNIVERSAL->import");
 }
diff --git a/t/uni/universal.t b/t/uni/universal.t
index 626c30f..c999dd8 100644
--- a/t/uni/universal.t
+++ b/t/uni/universal.t
@@ -13,7 +13,7 @@ BEGIN {
 use utf8;
 use open qw( :utf8 :std );
 
-plan tests => 93;
+plan tests => 90;
 
 $a = {};
 bless $a, "Bòb";
@@ -117,16 +117,6 @@ cmp_ok UNIVERSAL::can(Àlìcè => "can"), '==', 
\&UNIVERSAL::can;
 eval 'sub UNIVERSAL::slèèp {}';
 ok $a->can("slèèp");
 
-{
-    package Pìckùp;
-    no warnings "deprecated";
-    use UNIVERSAL qw( isa can VERSION );
-
-    ::ok isa "Pìckùp", UNIVERSAL;
-    ::cmp_ok can( "Pìckùp", "can" ), '==', \&UNIVERSAL::can;
-    ::ok VERSION "UNIVERSAL" ;
-}
-
 package Fòò;
 
 sub DOES { 1 }

--
Perl5 Master Repository

Reply via email to