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/codeand 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.
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.