2009-02-11 53 views
1

在httpd.conf中,我有:爲什麼我的<Perl>部分變量僅在mod_perl下有時纔可用?

<Perl> 
    $MyPackage::foo = { ... }; 
</Perl> 

根據該文檔,這應該,因爲它是合格的,持續到我的Perl腳本,它與modperl來處理程序運行。有時候他們會這樣做。但是我只需要觸摸MyPackage.pm,突然$ MyPackage :: foo現在是undef。重新啓動Web服務器,並再次運行。

有人結束了我的眼淚?

我最好的猜測是塊只能運行一次,當.conf被解析,然後一個新的線程拿起重新加載的文件。但爲什麼它不會每個線程運行一次?除了$ ENV和自定義指令,每個服務器只能加載一次,然後複製到所有的解釋器之外,還有什麼可以使用的嗎? (我可能在這裏使用了錯誤的術語,但是你明白了。)

回答

0

我在打字時想到了這一點,但是我認爲我會分享以防止其他人將我剛纔​​拉的頭髮出。

最簡單的解決方法是,你實際上並沒有使用中的.conf的範圍變量重命名爲:

<Perl> 
    $MyPackageConfig::foo = { ... }; 
</Perl> 

...,然後讓你的實際包撿起來:

package MyPackage; 
our $foo = $MyPackageConfig::foo; 

這似乎一直工作,當我測試它。

相關問題