2017-02-09 24 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 

如果你很好奇,有效的類名稱由PARAMS ::的Util :: _ CLASS,它看起來像this確定字符,而不是以數字開頭,並且可以用::分開。

+0

是的,我以爲我沒有'.pm'運行它,但我其實沒有。 – StevieD

相關問題