2012-02-07 64 views
2

希望有人可以對此有所瞭解...與DateTime :: Format :: ISO8601 Perl的問題跟蹤問題與Params ::驗證?

我和團隊中的許多其他開發人員在內部perl應用程序運行時都有很大的規模。儘管這一切都運行良好,橫跨每個人的筆記本電腦(Linux和Mac的),我不能在我的生活中在我的大PC上運行在家裏。

我已經安裝了通過CPAN所有的依賴,但訪問該網站時,我得到在Apache的錯誤日誌如下:

The 'regex' parameter ("(?x-ism:^ (\d{4}) (\d\d) (\d\d) $)") to DateTime::Format::Builder::Parser::create_single_parser was an 'unknown', which is not one of the allowed types: scalarref 
at /usr/local/lib/perl/5.12.4/Params/ValidatePP.pm line 651 
    Params::Validate::__ANON__('The \'regex\' parameter ("(?x-ism:^ (\d{4}) (\d\d) (\d\d) $)"...') called at /usr/local/lib/perl/5.12.4/Params/ValidatePP.pm line 491 
    Params::Validate::_validate_one_param('Regexp=REGEXP(0x7f8a3aad06e8)', 'HASH(0x7f8a3aaea840)', 'HASH(0x7f8a3aa75aa8)', 'The \'regex\' parameter ("(?x-ism:^ (\d{4}) (\d\d) (\d\d) $)")') called at /usr/local/lib/perl/5.12.4/Params/ValidatePP.pm line 353 
    Params::Validate::validate('ARRAY(0x7f8a3aa33808)', 'HASH(0x7f8a3aa32db8)') called at /usr/local/share/perl/5.12.4/DateTime/Format/Builder/Parser.pm line 312 
    DateTime::Format::Builder::Parser::create_single_parser(undef, 'params', 'ARRAY(0x7f8a3aad0640)', 'length', 8, 'regex', 'Regexp=REGEXP(0x7f8a3aad06e8)') called at /usr/local/share/perl/5.12.4/DateTime/Format/Builder/Parser.pm line 504 
    DateTime::Format::Builder::Parser::sort_parsers('DateTime::Format::Builder::Parser', 'HASH(0x7f8a3aa4e2b8)', 'ARRAY(0x7f8a3aa3f148)') called at /usr/local/share/perl/5.12.4/DateTime/Format/Builder/Parser.pm line 398 
    DateTime::Format::Builder::Parser::create_multiple_parsers('DateTime::Format::Builder::Parser', 'HASH(0x7f8a3aa4e2b8)', 'HASH(0x7f8a3aad06b8)', 'HASH(0x7f8a3aad0808)', 'HASH(0x7f8a3aad0910)', 'HASH(0x7f8a3aad0a00)', 'HASH(0x7f8a3aad0b08)', 'HASH(0x7f8a3aad0cb8)', 'HASH(0x7f8a3aad0e50)', ...) called at /usr/local/share/perl/5.12.4/DateTime/Format/Builder/Parser.pm line 603 
    DateTime::Format::Builder::Parser::create_parser('DateTime::Format::Builder::Parser', 'ARRAY(0x7f8a3a72fc88)', 'HASH(0x7f8a3aad06b8)', 'HASH(0x7f8a3aad0808)', 'HASH(0x7f8a3aad0910)', 'HASH(0x7f8a3aad0a00)', 'HASH(0x7f8a3aad0b08)', 'HASH(0x7f8a3aad0cb8)', 'HASH(0x7f8a3aad0e50)', ...) called at /usr/local/share/perl/5.12.4/DateTime/Format/Builder.pm line 158 
    DateTime::Format::Builder::create_parser('DateTime::Format::Builder', 'ARRAY(0x7f8a3aae5450)') called at /usr/local/share/perl/5.12.4/DateTime/Format/Builder.pm line 177 
    DateTime::Format::Builder::create_end_parser('DateTime::Format::Builder', 'ARRAY(0x7f8a3aae5450)') called at /usr/local/share/perl/5.12.4/DateTime/Format/Builder.pm line 106 
    DateTime::Format::Builder::create_class(undef, 'parsers', 'HASH(0x7f8a3aae8f18)') called at /usr/local/share/perl/5.12.4/DateTime/Format/ISO8601.pm line 175 

我堅持一些諾迪print STDERR的直接在ValidatePP.pm所以如果你正在尋找的行號,他們是輕微的,但基本上在ValidatePP.pm它越來越下面的代碼塊中sub _get_type

# I really hope this never happens. 
return UNKNOWN; 

如果有幫助,運行一個perl -v返回弗洛這個PC

上翼版這是Perl 5中,12版,顛覆4(v5.12.4)爲 x86_64的Linux的GNU的線程多

有人建?

UPDATE:

如果有幫助,子程序_get_type基本上決定(使用UNIVERSAL::isa),其regex: !!perl/regexp (?x-ism:^ (\d{4}) (\d\d) (\d\d) $)不是一個如果滿足以下:

my %isas = (
     'ARRAY' => ARRAYREF, 
     'HASH' => HASHREF, 
     'CODE' => CODEREF, 
     'GLOB' => GLOBREF, 
     'SCALAR' => SCALARREF, 
    ); 
+0

如果你提供了產生問題的代碼,這將有所幫助。 – ikegami 2012-02-07 21:32:28

+0

代碼庫很大,但歸結爲「USE DateTime :: Format :: ISO8601」,它引發錯誤 – devrooms 2012-02-08 08:18:45

回答

1

首先,您使用的是最新版本Params::Validate(和所有其他模塊)? 按照changelog有P中的一些錯誤:: V 1.01:

1.02 2012-02-06

  • 以前的版本不會被裝載的XS執行,即使它已經 編譯。

  • 隨着Perl的更新版本的出現,純Perl的實現以不同於XS實現的方式處理對象的正則表達式 對象。爲了向後兼容,它們應該被視爲屬於SCALARREF類型的 。

  • 這兩個錯誤組合在CPAN上設法打破了許多 模塊的測試套件。這個版本應該修復它們。

+0

認爲你可能是對的 - 肯定聽起來像我的問題,而更新的版本只在幾天前發佈 - 我今天晚些時候會檢查我的版本並嘗試升級它 - 希望你是對的! – devrooms 2012-02-08 08:19:59

+0

感謝yibe,升級該模塊已修復它。我現在感覺非常愚蠢:( – devrooms 2012-02-08 17:31:18