我正在尝试安装Class :: HPLOO perl模块并遇到问题。我正在使用Perl版本5.28.0。我迫切需要帮助来解决此问题,而且自最近几天以来,我一直在尝试解决这一问题,但没有运气:(。
我尝试通过cpan安装并出现以下错误:
# Running under perl version 5.028000 for linux
# Current time local: Thu Aug 23 22:50:40 2018
# Current time GMT: Fri Aug 24 02:50:40 2018
# Using Test.pm version 1.31
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.32), passed through in regex; marked by <-- HERE in m/({ <-- HERE \s+)/ at blib/lib/Class/HPLOO.pm line 1072.
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/(\S)( { <-- HERE ) (\S)/ at blib/lib/Class/HPLOO.pm line 1077.
not ok 1
# Failed test 1 in test.pl at line 9
# test.pl line 9 is: ok(!$@) ;
Undefined subroutine &Foo::new_call_BEGIN called at test/classtest.pm line 5.
make: *** [test_dynamic] Error 255
我已经从https://metacpan.org/pod/Class::HPLOO网站下载了模块,并尝试手动安装但存在相同问题。
# Running under perl version 5.028000 for linux
# Current time local: Fri Aug 24 12:42:24 2018
# Current time GMT: Fri Aug 24 16:42:24 2018
# Using Test.pm version 1.31
not ok 1
# Failed test 1 in test.pl at line 9
# test.pl line 9 is: ok(!$@) ;
Can't locate object method "new" via package "Foo" at test.pl line 11.
make: *** [test_dynamic] Error 2
请帮助解决此问题。预先感谢!
答案 0 :(得分:4)
CPAN testers matrix显示此模块无法在Perl v5.22或更高版本上构建。如果您能够在Perl的早期版本上使用和构建此模块,那么这是您的一个选择。
日志显示与发现的问题相同:已弃用的正则表达式构造,但这不是致命错误(尚未),也不是构建失败的原因。
在调试器中使用Perl v5.24深入并运行测试脚本,我看到那一行
eval { require "test/classtest.pm" } ;
使用以下消息设置$@
(表示require
调用失败)
DB<1> p $@
Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at test/classtest.pm line 5.
at test/classtest.pm line 5.
require test/classtest.pm called at test.pl line 8
eval {...} called at test.pl line 8
Compilation failed in require at test.pl line 8.
因此,我们看到此软件包(最近一次更新于2005年)使用的是defined(@array)
结构,该结构已被弃用很长时间,并且已经prohibited since v5.22.0。
defined(@array)
和lib/Class/HPLOO/Base.pm
中的lib/Class/HPLOO.pm
结构使用了4次。您可以尝试自己修复它们并重建模块。
答案 1 :(得分:0)
除了Mob建议的更改之外,您还需要编辑该模块的test.pl文件。在4个位置中,您会找到“ eval {require“ some / path>”};“将其更改为“ eval {require” ./some/path“};”
还会出现一个未转义的左括号,显然需要将其转义。
这使我能够成功完成HPLOO的安装,然后继续进行DBD的成功安装。