Search code examples
perlmod-perl

Perl/mod_perl: map use'd modules to paths with special characters



Probably my question is a simple one, but I can't find an answer in docs and I hope someone could help.

Q.: Which are the rules of mapping filenames and filesystem paths to use'd / require'd modules and the names used for package declarations, especially when there are used non-standard symbols like dots or commas? It also would be nice to find out the similar answer for mod_perl's PerlModule and PerlRequire Apache directives related to these scenarios.

As a concrete examle, I have a mod_perl project located in a path with dots and commas like

/var/www/projects/my.awesome.project,with,comma/code
and I have to load in Apache's conf file the code of a module:

PerlModule my.awesome.project,with,comma::code::MyModule

I also have to declare my package like

package my.awesome.project,with,comma::code::MyModule;

(one of my custom paths from @INC points to /var/www/projects)

Of course this doesn't work. These paths must be mapped to something else. Or isn't it possible at all and everyone have to use paths containg only alphanumeric symbols and underscores?

Thank you in advance for any help/answer.


Solution

  • Perl package names are identifiers, which means they must start with a letter or underscore, and contain only letters, numbers, and underscore. They can also be multiple identifiers separated by ::. The only filename mapping is that :: gets converted to / (or whatever the system directory separator is). Commas and periods are not allowed in package names.

    @INC doesn't have that restriction, so you could add /var/www/projects/my.awesome.project,with,comma to it and then name the package code::MyModule. But you're probably better off just sticking with alphanumerics and underscores for your directory names.