Perl / mod_perl: сопоставление используемых модулей с путями со специальными символами - PullRequest
1 голос
/ 13 апреля 2011


Возможно, у меня простой вопрос, но я не могу найти ответ в документации и надеюсь, что кто-нибудь сможет помочь.

Q.: Каковы правила сопоставления имен файлов и путей файловой системы к использование 'd / требует ' d модулей и имен, используемых для package объявлений, особенно когда используются нестандартные символы, такие как точки или запятые? Также было бы неплохо найти аналогичный ответ для директив mod_perl PerlModule и PerlRequire Apache, относящихся к этим сценариям.

В качестве конкретного примера у меня есть проект mod_perl, расположенный по пути с точками и запятыми, такими как

/var/www/projects/my.awesome.project,with,comma/code
, и я должен загрузить в файл Apache conf код модуля:
PerlModule my.awesome.project,with,comma::code::MyModule

Я также должен объявить мой пакет как

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

(один из моих пользовательских путей от @INC указывает на / var / www / projects)

Конечно, это не работает. Эти пути должны быть сопоставлены с чем-то другим. Или это вообще невозможно, и все должны использовать пути, содержащие только буквенно-цифровые символы и подчеркивания?

Заранее благодарю за любую помощь / ответ.

1 Ответ

5 голосов
/ 13 апреля 2011

Имена пакетов Perl являются идентификаторами , что означает, что они должны начинаться с буквы или подчеркивания и содержать только буквы, цифры и подчеркивание.Они также могут быть несколькими идентификаторами, разделенными ::.Единственное сопоставление имен файлов заключается в том, что :: преобразуется в / (или в любой другой разделитель системных каталогов).Запятые и точки не допускаются в именах пакетов.

@INC не имеет такого ограничения, поэтому вы можете добавить к нему /var/www/projects/my.awesome.project,with,comma и затем назвать пакет code::MyModule.Но вам, вероятно, лучше просто придерживаться буквенно-цифровых символов и подчеркиваний для имен каталогов.

...