Compiling a package into a namespace

Simon Wistow simon at
Fri Apr 11 19:52:56 BST 2008

This is very possibly one of those "You're asking the wrong question" 
questions but what the hell.

I have a mod_perl app and I want to load a package called 'foo' defined 
in ~/simon/a/ However I also want to load a package called 'foo' 
defined in ~/simon/b/ 

This will cause problems. 

So I'm wondering if it's possible to load ~/simon/a/ as a package 
named hash('~/simon/a/').'foo' or similar.

The one way I can think of doing it is reading in, doing 

	s!^package\s+([^\s;]+)\s*;!package ${path_hash}::${1};!smg;

 and then evaling it but that seems ... icky. And error prone especially 
if someone then does

	my $foo = foo->new;

unless I provide a method 

	my $foo = lookup_class('foo')->new;

where lookup_class just does return "${path_hash}::$_[0]" unless $_[0] 
is in %INC. Still ick though.

Of course then there's PPI but maybe that's feels hacky too.

So then I'm left with two other options - don't do it this way do it 
some way which I have no idea about or just mandate that you can't have 
two packages called 'foo'.


More information about the mailing list