Hi! I'm running into an odd desire, and I'm hoping someone here can at least 
tell me where to look, as so far Google and DDG are not telling me what I want.

I have a bunch of modules which have the same subroutines in each. Mostly, the 
code for the subroutines is the same, but there is a chance that any particular 
subroutine might be slightly different in any module (the context here involves 
internationalization). So, for instance:

        package PKG::en_US;
        our %map;
        sub handle_ages { ; }
        sub handle_dests { ; }

        package PKG::fr;
        our %map;
        sub handle_ages { ; }
        sub handle_dests { ; }

        package PKG::pt_BR;
        our %map;
        sub handle_ages { ; }
        sub handle_dests { ; }

What I want to do is be able to create a base module, something like

        package PKG::_base;
        sub handle_ages { ; }
        sub handle_dests { ; }

I could then define the rest of them as

        package PKG::en_US;
        our %map;

        package PKG::fr;
        our %map;
        sub handle_dests { ; }

        package PKG::pt_BR;
        our %map;

Then use some kind of symbol table mungery to add the undefined functions to 
each package.

This I can do.

However, where I need help, is that I want to be able to have the package 
variable "%map" be properly used by the functions added to each package. That 
is, if I call PKG::en_US::handle_ages, it should use %PKG::en_US::map, not (the 
nonexistant) %PKG::_base::map.

I've tried various things, but from what I can understand, even with everything 
declared "our", the sub definition closes over the package that it's in when 
defined. I've seen references to doing an `eval ("package $package; sub 
handle_ages { ; }")`, but this makes maintaining everything much harder, as I 
now don't have a base module, but rather a bunch of text strings.

Thanks,
Ricky


The information in this e-mail is intended only for the person to whom it is
addressed. If you believe this e-mail was sent to you in error and the e-mail
contains patient information, please contact the Partners Compliance HelpLine at
http://www.partners.org/complianceline . If the e-mail was sent to you in error
but does not contain patient information, please contact the sender and properly
dispose of the e-mail.


_______________________________________________
Boston-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/boston-pm

Reply via email to