Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl模块类::HPLOO v0.23安装问题#2_Perl_Module_Installation - Fatal编程技术网

perl模块类::HPLOO v0.23安装问题#2

perl模块类::HPLOO v0.23安装问题#2,perl,module,installation,Perl,Module,Installation,关于确切的问题,如所述:,我试图通过编辑到(@array)并尝试重建模块来纠正已定义(@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" "-I

关于确切的问题,如所述:,我试图通过编辑到
(@array)
并尝试重建模块来纠正
已定义(@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

Class::HPLOO
有三个问题(正如我之前提到的,自2005年以来一直没有更新过)导致现代perls失败

  • ,, 已定义(@array)的过时构造在
    lib/Class/HPLOO.pm'中使用一次,在
    lib/Class/HPLOO/Base.pm'中使用三次。从v5.22开始禁止这种构造

  • 当前目录(
    )不再位于
    @INC
    (我想从v5.24开始)。因此,
    test.pl
    中的行

    require "test/classtest.pm"
    
  • 要么全部都需要重写为

        require "./test/classtest.pm"
    
    或者更简单的解决方法是

        use lib '.';
    
    在脚本的顶部

  • lib/Class/HPLOO.pm
    第1077行有一个正则表达式,带有一个“未缩放的左大括号”

  • {
    是一个regex元字符,从v5.22开始,在不表示数量的上下文中使用它是非法的。正如错误消息所示,修复方法是转义它

          $sub =~ s/(\S)( \{) (\S)/$1$2\n$FIRST_SUB_IDENT  $3/gs ;
    

    对从CPAN下载的代码进行以下三项更改,模块应基于现代Perls。如果您觉得有帮助,可以提交错误报告(如果您愿意,请链接到本文)甚至是一个带有电子邮件的补丁,发送到
    bug类-HPLOO@rt.cpan.org

    今天遇到这个问题,所以我按照上面的答案解决了它。如果有人想节省一些时间


    我用这些更改创建了一个repo。

    eval{require“test/classtest.pm”}
    更改为
    require“test/classtest.pm”
    并查看
    eval…
    是否隐藏了更多错误。返回的结果是:“无法在@INC中找到test/classtest.pm(您可能需要安装test::classtest模块)…。”。没有这样的模块。因为我不知道我在做什么,我将
    require“test/classtest.pm”
    更改为
    require./test/classtest.pm”
    ,这使我想到:“'regex中未替换的左大括号在regex中是非法的;在每个位置都有“eval{require}”的错误后,逐个标记”我把它改为“require./”。最终完成了所有测试,没有错误。我通过返回“eval{}”的文件返回。它再次完成了所有测试,没有错误,我可以继续“make install”没有明显的错误。当然,这让我想到了一个问题:我需要在这些位置添加./的地方发生了什么变化,而从前它是一个工作模块?虽然显然不适合我。暴徒,在我对成功的兴奋中,我忘了感谢你。所以,谢谢你!谢谢暴徒,我忘记了未替换的左括号!太好了!May al因此考虑将补丁发送到<代码> bug类HPLOO@rt.cpan.org
    这样问题也可以在官方发行版中解决?
          $sub =~ s/(\S)( \{) (\S)/$1$2\n$FIRST_SUB_IDENT  $3/gs ;