Benjamin Goldberg wrote :
} > +If the file was loaded via a hook (see L<perlfunc/require> for a
} > +description of these hooks), a fake filename is inserted into %INC.
} > +It looks like F</loader/0x81095c8/Foo.pm>, where the hexadecimal
} > +number corresponds to the reference that was put in @INC.
}
} I suppose this is a silly question, but why not simply put the code ref
} [or arrayref or objectref] itself into %INC ? Would this make it much
} easier to patch the other stuff [AutoLoader, DynaLoader] to work with
} hooks in @INC ?
I didn't thought about this solution.
Here's what I had in mind :
When a file /loader/0x81095c8/Foo/Bar.pm is require'd, perl should :
1. Drop /loader/0x81095c8/ from the filename
2. look for a hook at address 0x81095c8 in @INC and try to load
Foo/Bar.pm from it
3. if this fails, walk over the whole @INC to try to find Foo/Bar.pm
(that's the questionable part)
4. if this also fails, die.
The problem is : /loader/0x81095c8/Foo/Bar.pm is constructed from the
value in %INC corresponding to a module previously loaded via this hook.
This construction will stringify the %INC value and will end with
something like "CODE(0x81095c8)Foo/Bar.pm". This will not solve the
problem unless we patch all modules out there that mess up with %INC in
specific AUTOLOAD routines (Gisle has given an example).
Thread Previous
|
Thread Next