2014-04-03 20 views
-2

我正在一個錯誤原型不匹配:子POE ::內核:: F_GETFL()與在無(EVAL 33)第1行

原型不匹配:子POE ::內核:: F_GETFL()對沒有在(eval 33)第1行

嘗試在eclipse中使用eclipse運行perl代碼。我在我的Perl代碼中使用POE模塊。

我該如何解決這個問題?

+2

有什麼要繼續?這是在你的程序中?你的程序在做什麼?這是一個模塊嗎?你能告訴我們一些代碼嗎? –

+0

大衛,我在我的Perl程序中使用POE框架。此錯誤來自POE中定義的模塊之一,該模塊來自POE :: Resource :: FileHandles.pm和POE :: Kernel.pm。錯誤如下: FileHandles.pm BEGIN {(RUNNING_IN_HELL){* {F_GETFL = sub {0};'; eval'* F_SETFL = sub {0};'; } } –

回答

0

只見RUNNING_IN_HELL,不知道哪裏是從何而來:

BEGIN { 
    local $SIG{'__DIE__'} = 'DEFAULT'; 

    { 
     no strict 'refs'; 
     if ($^O eq 'MSWin32') { 
      *{ __PACKAGE__ . '::RUNNING_IN_HELL' } = sub { 1 }; 
     } else { 
      *{ __PACKAGE__ . '::RUNNING_IN_HELL' } = sub { 0 }; 
     } 
    } 
} 

所以,他定義了一個名爲RUNNING_IN_HELL常數,如果是在Windows上運行的設置爲

我看到很多檢查,確保你有一個特定版本的Perl和各種模塊。它看起來像較早的版本的Perl 5.10版本可能是片狀的。在Windows上運行時,任何將定義爲RUNNING_IN_HELL的常量定義爲true的模塊在Windows中可能都有某些問題。

我建議您與模塊的作者Rocco Caputo聯繫,並與他討論模塊的內部工作原理以及爲什麼您可能會收到這些錯誤。這可能只是他沒有檢查的一個條件。

即使那樣,你將不得不顯示一些源代碼。你要解釋什麼正在做什麼,如何設置調用到模塊,以及什麼版本的Perl 使用,什麼在嘗試這樣做縮小問題範圍。

+0

無法達到「羅科卡普託」,可以sombody幫助我解決這個問題。 –

+0

大衛,在修復上述錯誤之後,我現在得到了錯誤。 (我正在windows中運行) 子程序AUTOLOAD重新定義在C:/Perl/site/lib/Time/HiRes.pm第31行。 子程序導入重新定義在C:/Perl/site/lib/Time/HiRes.pm第49行。 子程序tv_interval重新定義在C:/Perl/site/lib/Time/HiRes.pm第70行。 這段代碼在linux平臺上運行良好。 –

+0

AUTOLOAD是在找不到其他_methods_時執行的類的子例程。這是一種快速構建一組方法而無需實際編寫方法的方法。例如,我可以定義'AUTOLOAD'來假定方法調用是我的類的哈希鍵,並使用'AUTOLOAD'爲該屬性執行自動getter/setter方法。看起來這個子例程正在爲這個類重新定義。看看這個文件,看看它是否有多個AUTOLOAD子程序,也可能是爲什麼它們都被重新加載。 –

相關問題