develooper Front page | perl.perl5.porters | Postings from July 2012

[perl #71154] undef &$coderef consistency

Father Chrysostomos via RT
July 8, 2012 00:27
[perl #71154] undef &$coderef consistency
Message ID:
On Wed Dec 09 14:42:07 2009, nicholas wrote:
> $ ./perl -e '$a = sub {}; warn "Before: $a"; undef &$a; warn "After
>    $a"; $a->()'
> Before: CODE(0x100815848) at -e line 1.
> After CODE(0x100815848) at -e line 1.
> Not a CODE reference at -e line 1.
> only it sure does look like a CODE reference.

I fixed that to produce a sensible error message in commit 2c3743704,
which is in 5.16.

What I did not realise was that the problem actually went further (and
my commit fixed this, too):

sub __ANON__ { warn 42 }
$x = sub {};
undef &$x;

With 5.14.0:
42 at - line 1.

With 5.16.0:
Undefined subroutine called at - line 4.

So I have improved the test with commit 12f98b43fb8, which makes sure
__ANON__() is not called.

But the problem goes even deeper than that.  This ‘Not a CODE
reference’ error was occurring whenever an already-autoloaded subroutine
was looked for when calling a stub, if the GV had no CV in it.  Compare:

$ perl5.16.0 -e '
  my $foosub = \&foo;
Undefined subroutine &main::foo called at -e line 3.

$ perl5.16.0 -e '
  my $foosub = \&foo;
  undef *foo;
Not a CODE reference at -e line 4.

So I have just fixed that now with commit c220e1a11e.


Father Chrysostomos

via perlbug:  queue: perl5 status: resolved Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About