Модуль Perl Class :: HPLOO v0.23, выпуск № 2 - PullRequest
0 голосов
/ 26 августа 2018

Имея точную проблему, как описано в: Perl модуль Class :: HPLOO v0.23 проблема установки , я попытался исправить проблему defined(@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

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

столкнулся с этой проблемой сегодня, поэтому я исправил ее, следуя ответу выше.если кто-то захочет сэкономить.

Я создаю репо с изменениями.https://github.com/swuecho/Class_HPLOO.git

0 голосов
/ 26 августа 2018

Существует три проблемы с Class::HPLOO (которые, как я уже отмечал ранее, с 2005 года не обновлялись), которые приводят к сбою в современных perls.

  1. Какобнаруженная в предыдущем посте , устаревшая конструкция defined (@array) используется один раз в lib/Class/HPLOO.pm' and three times in lib / Class / HPLOO / Base.pm`.Эта конструкция была запрещена начиная с v5.22

  2. Текущий каталог (.) больше не находится в @INC (я думаю, что с v5.24).Таким образом, строки в test.pl, такие как

    require "test/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-Class-HPLOO@rt.cpan.org

...