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 $@;
     }
   }

Reply via email to