note
ihb
<p>
This is more of a theoretical danger though. Yes, it can leak and we both know you shouldn't actually do this. It's not very safe to use a pattern to decide what to export to begin with. Stuff like this should be done explicitly, so you know what you have and what you get, etc.
</p><p>
But when is this leaking a problem? Sure, X gets an extra subroutine. But what difference does that make? When would X be calling this <code>&foo</code>, if it doesn't exist? Sure, there's the <code>AUTOLOAD</code> issue, but we have to believe that whoever uses the technique in the root node is knowing what he's doing and knows not to use <code>AUTOLOAD</code> since he <i>implicitly</i> aliases symbols. <i>Symbols</i>, I repeat.
</p><p>
"But what if X has its own <code>&foo</code>", I hear you (or someone else) say. If defined before the import, no problem. That can be detected and issue a warning. (A glob overwrite warning.) If defined after the import, well, then you get a debugging hell--if you're not using warnings. Because a "Subroutine %s redefined" warnings will be issue. If not using warnings, well, I don't want to think about it. The package will change the exporting module's <code>&foo</code> and that will in its turn change all <code>&foo</code>'s out there that has been imported. (It doesn't actually do this chain. They're all just one and the same.)
</p><p>
To put this in context of your code in the root node: The importing module shouldn't have any symbol names what-so-ever that matches the pattern that the exporting module uses. (Of course documented in the exporting module.) Neither module should be using <code>AUTOLOAD</code>, since symbols are aliased implicitly. The <code>&foo</code> issue above can be generalized: all importing modules will share the same symbol, meaning that if one importing module modifies the symbol then all importing modules will also get the symbol modified.
</p><p>
This all might seem scary as hell, and yeah, it can be. But this is also a quick'n'dirty hack. Since when is "arbitrary" imports considered OK by the purists anyway?
</p>
<code>ihb</code>
<p>
PS. I'm not actually arguing with you, even though it may sound like it. I'm just elaborating on the subject.
</p>
228094
228786