2011-04-13 69 views
1


也許我的問題是一個簡單的問題,但我無法在文檔中找到答案,我希望有人可以提供幫助。Perl/mod_perl:將use'd模塊映射到具有特殊字符的路徑

問:哪些是映射文件名和文件系統路徑的規則,以使用'D/要求倒是模塊和用於包名稱聲明,尤其是當有使用的非標準像點或逗號的符號?對於mod_perl的PerlModulePerlRequire與這些場景相關的Apache指令,也很高興找到類似的答案。

舉一個具體的examle,我必須位於與點和逗號像

/var/www/projects/my.awesome.project,with,comma/code
的路徑mod_perl的項目,我必須在Apache的 的conf文件加載一個模塊的代碼:

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

我也要申報

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

(從@INC點我的自定義路徑之一到/ var/WWW /項目)

當然這不起作用。這些路徑必須映射到別的東西。或者根本不可能,每個人都必須使用只包含字母數字符號和下劃線的路徑?

非常感謝您的幫助/回答。

回答

5

Perl軟件包名稱爲identifiers,這意味着它們必須以字母或下劃線開頭,並且只包含字母,數字和下劃線。它們也可以是由::分隔的多個標識符。唯一的文件名映射是::轉換爲/(或任何系統目錄分隔符)。包名稱中不允許使用逗號和句點。

@INC沒有這個限制,所以你可以添加/var/www/projects/my.awesome.project,with,comma到它,然後命名包code::MyModule。但是,你可能更喜歡使用字母數字和下劃線來表示目錄名稱。

+0

謝謝你的回答,cjm。
我被告知「::」到「/」映射 – ArtM 2011-04-13 17:38:15

+0

對不起另一條消息。我是新來的,「編輯5分鐘」對我來說是一個巨大的勝利。我被告知有關「::」到「/」的映射,並且我並沒有對包名稱進行識別。但我的問題更多來自mod_perl域而不是純Perl。我的意思是,當腳本文件名映射到帶有附加的「Apache :: ROOT」前綴並映射到「_2e」的句點的內部程序包模塊時,可能存在像Apache :: Registry所使用的_hidden_​​映射。 – ArtM 2011-04-13 17:52:57

+0

@ArtM,不,mod_perl不會像普通包那樣做任何事情。 Apache :: Registry做到了這一點,因爲它處理的是多個腳本,所有這些腳本都是「main」包,並使它們共存。 – cjm 2011-04-13 18:54:55