2009-01-14 35 views
3

我正在研究一個使用Crypt::RSA的非常大的CGI應用程序,它已正確安裝。當我嘗試運行任何嵌入式庫時,我得到一個「嘗試調用空引用作爲函數」類型的錯誤(我現在無法返回以獲取確切的錯誤,因爲我們必須回滾發佈日期) 。我跟蹤Crypt :: RSA的構造函數的空引用,它使用Class::Loader來啓用Crypt :: RSA :: ES :: OAEP。什麼可以使Class :: Loader失敗,其中「使用」和「新」不?

我用「use」和「new」替換了類加載器,該部分工作正常,但該庫仍然失敗了很多點。很明顯,我的環境出了問題。我只是不確定是什麼。任何人都可以給我任何線索?

+0

您是否嘗試過運行Crypt :: RSA的測試? – innaM 2009-01-14 16:14:55

+0

是的,他們都完美成功。 – user54650 2009-01-14 17:18:07

回答

2

好吧,經過12小時的挖掘,我得到了這個工作。

這是發生了什麼(但不是爲什麼)。每當我在引用的userequire語句(如發生在Class :: Loader中,但也在Crypt :: framwork中的其他位置)上調用eval()時,它看不到包含在Perl類路徑中的路徑。由於大多數引用的使用/要求對象只是假設該類將在那裏,所以很少有有用的錯誤被拋出。我會將@INC轉儲到eval塊外的文件中,並且所有內容都將在那裏。具有諷刺意味的是,我在dev和staging中使用了相同的設置,它在dev中工作,但在分段中不起作用。我還必須指出,FindBin(我不應該在CGI中使用它,我知道,但Crypt使用它)在啓動時大約在/ dev/null上閃爍,但在開發過程中卻沒有。

由於我無法輕鬆比較版本或全局配置,這就是我的追求結束的地方。

我如何在Crypt :: RSA中爲自己解決問題是禁用與FindBin相關的所有命令,並且爲我的代碼訪問的任何內容禁用硬編碼requir e參考。我在Crypt :: RSA for Crypt :: RSA :: ES :: OAEP中執行了一個要求,在Crypt :: Random :: Generator for Crypt :: Random :: Provider :: rand中執行了一個要求:

希望這可以幫助任何人未來誰有這個問題。任何人都可以爲此提出建議,請回復,我將添加它以完成該帖子。

相關問題