디버깅 시간이 너무 많아서 마침내 this issue을 간단한 테스트 케이스로 제거했습니다. 나는 그것이 실패하고있는 이유를 이해하는 데 도움이되도록 겸허하게 요청할 것입니다. :) 여기에 내가지고있어 오류 메시지입니다 :MooseX :: Types 선언 문제, 엄격한 테스트 케이스 :)
plxc16479> $h2/tmp/tmp18.pl
This method [new] requires a single argument. at /nfs/pdx/disks/nehalem.pde.077/perl/5.12.2/lib64/site_perl/MooseX/Types/TypeDecorator.pm line 91
MooseX::Types::TypeDecorator::new('MooseX::Types::TypeDecorator=HASH(0x655b90)') called at /nfs/pdx/disks/nehalem.pde.077/projects/lib/Program-Plist-Pl/lib/Program/Plist/Pl.pm line 10
Program::Plist::Pl::BUILD('Program::Plist::Pl=HASH(0x63d478)', 'HASH(0x63d220)') called at generated method (unknown origin) line 29
Program::Plist::Pl::new('Program::Plist::Pl') called at /nfs/pdx/disks/nehalem.pde.077/tmp/tmp18.pl line 10
래퍼 테스트 스크립트 :
use strict;
use warnings;
BEGIN {push(@INC, split(':', $ENV{PERL_TEST_LIBS}))};
use Program::Plist::Pl;
my $obj = Program::Plist::Pl->new();
프로그램 :: PLIST : 경기 수 파일 :
package Program::Plist::Pl;
use Moose;
use namespace::autoclean;
use Program::Types qw(Pattern); # <-- Removing this fixes error
use Program::Plist::Pl::Pattern;
sub BUILD {
my $pattern_obj = Program::Plist::Pl::Pattern->new();
}
__PACKAGE__->meta->make_immutable;
1;
프로그램 :: 유형 파일 :
package Program::Types;
use MooseX::Types -declare => [qw(Pattern)];
class_type Pattern, {class => 'Program::Plist::Pl::Pattern'};
1;
그리고 프로그램 :: Plist :: Pl :: Patte RN 파일 :
package Program::Plist::Pl::Pattern;
use Moose;
use namespace::autoclean;
__PACKAGE__->meta->make_immutable;
1;
참고 : 나는 위의 코드에 Program::Types
에서 Pattern
유형을 필요로하지 않지만, 내가 밖으로 제거되어 다른 코드에서 할. INC
경로를 가져 오는 PERL_TEST_LIBS
env var에는 프로젝트 모듈에 대한 경로 만 포함됩니다. 이 경로에서로드 된 다른 모듈은 없습니다.
Pattern
에 대한 MooseX::Types 정의가 문제를 일으키는 것처럼 보입니다. 그러나 이유는 확실하지 않습니다. 문서는 내가 사용하고있는 구문을 보여 주지만, 그것에 대해 많이 언급하지 않았기 때문에 나는 class_type
을 오용하고있을 가능성이 있습니다. 의도는 MooseX::Params::Validate을 통해 Pattern
을 사용하여 유형을 확인하여 인수가 Program::Plist::Pl::Program
객체인지 확인할 수 있습니다.
내가 찾은이 직접 Program::Types
Pattern
유형을 가져올 경우에도, 아니 오류에 tmp18.pl
래퍼 결과에서 Pattern->new
를 호출하여 식에 개입 클래스 Program::Plist::Pl
을 제거.
Program :: Plist :: Pl :: Pattern-> new가 Pattern-> new로 오인 된 것 같습니다. 여기서 Pattern은 My MooseX 정의 유형입니다.따라서 Program :: Plist :: Pl :: Pattern의 인스턴스를 만드는 대신 Pattern 유형 객체의 인스턴스를 만들려고합니다. –