2017-02-09 12 views
2

는 내가 MooseX::Runnable docs의 예 다음 실행 가능한 무스 프로그램을 만들려고 해요 :왜 "속성 (클래스)이 유형 제약 조건을 전달하지 않습니다 : 'MooseX :: Runnable :: Invocation :: RunnableClass'에 대한 유효성 검사가 실패 했습니까?

package LaborData::Data::DBIxTest; 
use Moose; 
use Modern::Perl; 
use LaborData::Data::Schema; 
with 'DB', 'MooseX::Runnable'; 

sub run { 
    my ($self, $name) = @_; 
    say $name; 
} 

을하지만 명령 행에

mx-run LaborData::Data::DBIxTest.pm hi 

을 실행할 때이 오류가 얻을 :

Attribute (class) does not pass the type constraint because: Validation failed for 'MooseX::Runnable::Invocation::RunnableClass' with value "LaborData::Data::DBIxTest.pm" at /usr/lib/x86_64-linux-gnu/perl5/5.20/Moose/Util.pm line 49 
    Moose::Util::throw_exception('ValidationFailedForTypeConstraint', 'type', 'MooseX::Types::TypeDecorator=HASH(0x38728e8)', 'value', 'LaborData::Data::DBIxTest.pm', 'attribute', 'Moose::Meta::Attribute=HASH(0x38bd4e8)') called at /usr/lib/x86_64-linux-gnu/perl5/5.20/Moose/Meta/Attribute.pm line 1265 
    Moose::Meta::Attribute::verify_against_type_constraint('Moose::Meta::Attribute=HASH(0x38bd4e8)', 'LaborData::Data::DBIxTest.pm', 'instance', 'MooseX::Runnable::Invocation::MxRun=HASH(0x38a13d8)') called at /usr/lib/x86_64-linux-gnu/perl5/5.20/Moose/Meta/Attribute.pm line 1252 
    Moose::Meta::Attribute::_coerce_and_verify('Moose::Meta::Attribute=HASH(0x38bd4e8)', 'LaborData::Data::DBIxTest.pm', 'MooseX::Runnable::Invocation::MxRun=HASH(0x38a13d8)') called at /usr/lib/x86_64-linux-gnu/perl5/5.20/Moose/Meta/Attribute.pm line 511 
    Moose::Meta::Attribute::initialize_instance_slot('Moose::Meta::Attribute=HASH(0x38bd4e8)', 'Moose::Meta::Instance=HASH(0x3881ad0)', 'MooseX::Runnable::Invocation::MxRun=HASH(0x38a13d8)', 'HASH(0x37fc528)') called at /usr/lib/x86_64-linux-gnu/perl5/5.20/Class/MOP/Class.pm line 524 
    Class::MOP::Class::_construct_instance('Moose::Meta::Class=HASH(0x3481260)', 'HASH(0x37fc528)') called at /usr/lib/x86_64-linux-gnu/perl5/5.20/Class/MOP/Class.pm line 494 
    Class::MOP::Class::new_object('Moose::Meta::Class=HASH(0x3481260)', 'HASH(0x37fc528)') called at /usr/lib/x86_64-linux-gnu/perl5/5.20/Moose/Meta/Class.pm line 274 
    Moose::Meta::Class::new_object('Moose::Meta::Class=HASH(0x3481260)', 'HASH(0x37fc528)') called at /usr/lib/x86_64-linux-gnu/perl5/5.20/Moose/Object.pm line 23 
    Moose::Object::new('MooseX::Runnable::Invocation::MxRun', 'class', 'LaborData::Data::DBIxTest.pm', 'plugins', 'HASH(0x387f1a0)', 'parsed_args', 'MooseX::Runnable::Util::ArgParser=HASH(0x3486408)') called at /usr/local/bin/mx-run line 28 
    main::run at /usr/local/bin/mx-run line 9 

오류없이 스크립트에서 모듈을 정상적으로로드 할 수 있습니다. 또한 해독하기 어려울 수 technique found here.

+1

https://rt.cpan.org/Public/Bug/Display.html?id=58028 – ThisSuitIsBlackNot

+0

그 버그가 패치되었고, 게다가 내 모듈 이름이 버그를 일으키는 정규식을 전달합니다. 그래서 필자는 실제로 패키지 이름 끝에'.pm' 확장자없이 명령을 실행하려고 시도하지 않았다는 것을 알았습니다. 일단 내가 그것을 제거, 잘 작동. – StevieD

+0

맞아요, 그 티켓은 닫아야합니다! – ThisSuitIsBlackNot

답변

2

무스 오류 메시지를 사용하여 잘 프로그램을 실행할 수 있지만이 열쇠 조각 :

Validation failed for 'MooseX::Runnable::Invocation::RunnableClass' with value "LaborData::Data::DBIxTest.pm"

LaborData::Data::DBIxTest.pm가 유효한 클래스 이름이 아닙니다. .pm을 드롭해야합니다 (예 :

sub _CLASS ($) { 
     (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s) ? $_[0] : undef; 
} 

, 하나 이상의 숫자를 : 당신이 궁금하다면

mx-run LaborData::Data::DBIxTest hi 

, 유효한 클래스 이름은 this 모양에 Params :: 백분율 :: _ CLASS에 의해 결정된다 문자는 숫자로 시작하지 않으며, 선택적으로 ::으로 분리됩니다.

+0

그래, 난'.pm'없이 실행 한 줄 알았지 만 사실은 그렇지 않았다. – StevieD