有了“:perl module Class::HPLOO v0.23 install issue”中描述的确切问题,我试图通过编辑到(@array)并尝试重新构建模块来纠正defined(@array)问题。然而,我继续得到以下的回报:
$ make clean
$ perl Makefile.PL
$ make
$ make test: *** No rule to
make target `clean:'.  Stop. Manifying 2 pod documents
PERL_DL_NONLAZY=1 "/opt/local/bin/perl5.26" "-Iblib/lib" "-Iblib/arch"
test.pl
1..42
# Running under perl version 5.026002 for darwin
# Current time local: Sun Aug 26 06:48:26 2018
# Current time GMT:   Sat Aug 25 22:48:26 2018
# Using Test.pm version 1.26 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发布于 2018-08-26 02:17:31
Class::HPLOO有三个问题(正如我之前提到的,自2005年以来一直没有更新),这使得它在现代perls中失败了。
defined (@array)只在lib/Class/HPLOO.pm' and three times inlib/Class/HPLOO/Base.pm中使用过一次。这种建筑从5.22开始就被禁止了。.)不再在@INC中(我认为从5.24版本开始)。所以test.pl中的线条就像
要求测试/classtest.pm所有这些都需要重写为
    require "./test/classtest.pm"或者更简单的解决办法是
    use lib '.';在剧本的顶端。
lib/Class/HPLOO.pm中有一个正则表达式,第1077行带有“未转义的左大括号”。
$sub =~ s/(\S)( {) (\S)/$1$2\n$FIRST_SUB_IDENT $3/gs;{是一个正则元字符,从5.22版本开始,在没有指示数量的上下文中使用它是非法的。正如错误信息所建议的,修复方法是转义它。
      $sub =~ s/(\S)( \{) (\S)/$1$2\n$FIRST_SUB_IDENT  $3/gs ;对您从CPAN下载的代码进行这三项更改,模块应该建立在现代Perls之上。如果你觉得有用,你可以提交一个bug报告(如果你想的话,可以链接到这篇文章),甚至可以提交一个带有电子邮件到bug-Class-HPLOO@rt.cpan.org的补丁。
发布于 2019-03-29 11:22:15
今天遇到这个问题,所以我按照上面的答案修正了它。如果有人想节省点时间。
我创建了一个带有变化的回购。HPLOO.git
https://stackoverflow.com/questions/52021890
复制相似问题