On Wed, 2004-03-03 at 23:24, David Manura wrote:
>
> The approach I currently use is what you do not recommend. How does the above
> T::B 1.96 source code break Pollute?
$caller = caller() unless caller() =~ /^Exporter(?:::Heavy)?$/;
$request_versions{$caller} = $req_ver;
Pollute works by re-exporting imported symbols. At use/VERSION time,
caller would be "Pollute" rather than the package where the methods are
going to get called from. I don't know how widely used Pollute is,
but the other re-exporting modules may take similar approaches. The
hash lookup into %request_versions shouldn't be any faster than
the hash lookup into the dynamic variables. We could set flags for
interface-number-based decisions at VERSION time
$req_ver >= 1.96 and return 1;
${caller()."::__Text_Balanced_Old_Interface_Flag"} = 1;
Then later, instead of referring to $request_versions{$caller} and
checking that against numbers, we can check
exists("${caller}::__Text_Balanced_Old_Interface_Flag"})
This way, if Text::Balanced was included in a Pollute include file
use Pollute;
use Text::Balanced 1.93;
use Chemical::Imbalance;
...
Pollute;
1;
the flag variable $__Text_Balanced_Old_Interface_Flag will get rexported.