POE::FIlter::Reference does the following to check if the package $freezer
is loaded :
exists $::{$freezer.'::'}
and the following to load the package
eval { eval {require "$freezer.pm"; import $freezer ();};
This fails pityfully if $freezer contains ::. The following patch cures
this. I don't know if s(::)(/)g; is compatible with Mac OS, though.
Maybe we should just eval "use $freezer ();";
-Philip
--- POE/Filter/Reference.pm 2000/12/26 06:14:12 1.20
+++ POE/Filter/Reference.pm 2001/07/13 00:31:31
@@ -56,8 +56,20 @@
$freezer ||= _default_freezer();
# not a reference... maybe a
package?
unless(ref $freezer) {
- unless(exists $::{$freezer.'::'}) {
- eval {require "$freezer.pm"; import $freezer ();};
+ my $symtable=$::{"main::"};
+ my $loaded=1; # find out of the package was
loaded
+ foreach my $p (split /::/, $freezer) {
+ unless(exists $symtable->{"$p\::"}) {
+ $loaded=0;
+ last;
+ }
+ $symtable=$symtable->{"$p\::"};
+ }
+
+ unless($loaded) {
+ my $q=$freezer;
+ $q=~s(::)(/)g;
+ eval {require "$q.pm"; import $freezer ();};
croak $@ if $@;
}
}