This is a live mirror of the Perl 5 development currently hosted at
Avoid vivifying stuff when looking up barewords
authorFather Chrysostomos <>
Sat, 30 Aug 2014 03:18:23 +0000 (20:18 -0700)
committerFather Chrysostomos <>
Sat, 30 Aug 2014 04:50:43 +0000 (21:50 -0700)
Till now, when a bareword was looked up to see whether it was a sub-
routine, an rv2cv op was created (to allow PL_check hooks to override
the process), which was then asked for its GV.

Afterwards, the GV was downgraded back to nothing if possible.

So a lot of the time a GV was autovivified and then discarded.  This
has been the case since f74617600 (5.12).

If we know there is a good chance that the rv2cv op is about to be
deleted, we can avoid that by passing a flag to the new op.

Also f74617600 actually changed the behaviour by vivifying stashes
that used not be vivified:

sub foo { print shift, "\n" }
SUPER::foo bar if 0;
foo SUPER;

Output in 5.10:


Output as of this commit:


Output in 5.12 to 5.21.3:

    Can't locate object method "foo" via package "SUPER" at - line 3.

No differences found