[perl #68640] Wrong error for undef constant name
Zefram [Tue, 15 Dec 2009 10:17:35 +0000 (11:17 +0100)]
dist/constant/lib/constant.pm
dist/constant/t/constant.t

index a51ee7f..3ee1a6f 100644 (file)
@@ -4,7 +4,7 @@ use strict;
 use warnings::register;
 
 use vars qw($VERSION %declared);
-$VERSION = '1.19';
+$VERSION = '1.20';
 
 #=======================================================================
 
@@ -60,15 +60,14 @@ sub import {
        }
        $constants = shift;
     } else {
-       $constants->{+shift} = undef;
-    }
-
-    foreach my $name ( keys %$constants ) {
-       unless (defined $name) {
+       unless (defined $_[0]) {
            require Carp;
            Carp::croak("Can't use undef as constant name");
        }
+       $constants->{+shift} = undef;
+    }
 
+    foreach my $name ( keys %$constants ) {
        # Normal constant name
        if ($name =~ $normal_constant_name and !$forbidden{$name}) {
            # Everything is okay
index a42b7d2..85a9355 100644 (file)
@@ -9,7 +9,7 @@ END { @warnings && print STDERR join "\n- ", "accumulated warnings:", @warnings
 
 
 use strict;
-use Test::More tests => 95;
+use Test::More tests => 96;
 my $TB = Test::More->builder;
 
 BEGIN { use_ok('constant'); }
@@ -341,3 +341,9 @@ $kloong = 'schlozhauer';
     is ($@, '');
     is_deeply (\@value, []);
 }
+
+{
+    local $SIG{'__WARN__'} = sub { die "WARNING: $_[0]" };
+    eval 'use constant undef, 5; 1';
+    like $@, qr/\ACan't use undef as constant name at /;
+}