I wonder what he was thinking...
The hash-style usage of constant wasn't added until perl 5.7.1, and the defined $name check was around before that. Basically all of 5.7.0's code was kept intact and put in the for loop. The defined $name check was just accidentally (I presume) left inside the for loop.
Here's how it should look.
my $multiple = ref $_[0];
if ( $multiple ) {
...
} else {
unless (defined $_[0]) {
require Carp;
Carp::croak("Can't use undef as constant name");
}
$constants{+shift} = undef;
}
foreach my $name ( keys %constants ) {
...
}
Not that this matters much, because
use constant undef, 'x';
will fail anyway. You just get a slightly less clear error message.
lodin |