http://www.perlmonks.org?node_id=11120095

LanX has asked for the wisdom of the Perl Monks concerning the following question:

It's possible to define a fully qualified sub by adding the package to the name.

So I played around with sub X::foo and noticed that sub resolution happens in the surrounding package.

That looks consistent to me, it's analogue to BEGIN{ *X::foo = sub { } } where the anonymous sub carries its package context around.

Hence calling foo() will work while bar() fails, because Data::Dump wasn't imported into X::

use strict; use warnings; use Data::Dump qw/pp dd/; sub X::foo { pp(\@_) }; BEGIN { *X::baz = sub { pp(\@_) } }; package X; sub bar { pp(\@_) } ; foo(1..3); # [1, 2, 3] baz(1..3); # [1, 2, 3] bar(4..6); # Undefined subroutine &X::pp +called

Question: What are the use cases of that pattern?

The only thing which comes to mind is monkey patching a sub in another package without adding inner helper functions into that package.

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery