【问题标题】:Using the perl MooseX extention in silent mode?在静默模式下使用 perl MooseX 扩展?
【发布时间】:2010-08-17 17:58:55
【问题描述】:

我的 ubuntu 机器上安装了 perl 5.10.1。我想安装 Moose 和 MooseX 扩展,所以我确实使用 aptitude 包管理器安装了这些包。以下是我安装的所有软件包:

$ sudo apt-cache pkgnames | grep moose
libmoosex-singleton-perl
libmoosex-compiletime-traits-perl
libmoosex-types-structured-perl
libmoosex-traits-pluggable-perl
libmoosex-nonmoose-perl
libmoosex-methodattributes-perl
libmoosex-strictconstructor-perl
libmoosex-classattribute-perl
libany-moose-perl
libmoosex-traits-perl
libmoosex-meta-typeconstraint-forcecoercion-perl
libmoosex-attributehelpers-perl
libmoosex-types-set-object-perl
libmoosex-multiinitarg-perl
libmoosex-has-sugar-perl
libmoosex-role-withoverloading-perl
libmoosex-getopt-perl
libmoosex-aliases-perl
libmoosex-types-varianttable-perl
libmoosex-types-datetime-perl
libmoosex-yaml-perl
libmoosex-daemonize-perl
libmoosex-blessed-reconstruct-perl
libmoosex-emulate-class-accessor-fast-perl
libmoosex-poe-perl
libmoose-perl
libmoosex-types-common-perl
libmoosex-async-perl
libmoosex-method-signatures-perl
libmoosex-storage-perl
libmoosex-log-log4perl-perl
libmoose-policy-perl
libmoosex-semiaffordanceaccessor-perl
libmoose-autobox-perl
libmoosex-app-cmd-perl
libmoosex-role-parameterized-perl
libmoosex-params-validate-perl
libmoosex-object-pluggable-perl
libmoosex-declare-perl
libmoosex-lazyrequire-perl
libmoosex-methodattributes
libmoosex-clone-perl
libmoosex-types-perl
libmoosex-types-path-class-perl

我的问题是,为什么我在运行使用 MooseX::* 扩展的代码时会出现乱码?有没有办法启用静音模式?仅使用 Moose 不会在输出中显示任何其他内容,但会显示所需的结果,但如果我使用 MooseX::Declare 会得到以下结果:

$ ./myPerlProg.pl
The old Moose::Util::MetaRole API (before version 0.94) has been deprecated at /usr/local/lib/perl/5.10.1/Moose/Util/MetaRole.pm line 16
 Moose::Util::MetaRole::apply_metaclass_roles('for_class', 'MooseX::Method::Signatures', 'attribute_metaclass_roles', 'ARRAY(0x9ec2988)') called at /usr/share/perl5/MooseX/LazyRequire.pm line 15
 MooseX::LazyRequire::init_meta('MooseX::LazyRequire', 'for_class', 'MooseX::Method::Signatures', 'metaclass', undef) called at /usr/local/lib/perl/5.10.1/Moose/Exporter.pm line 355
 Moose::Exporter::__ANON__('MooseX::LazyRequire') called at /usr/share/perl5/MooseX/Method/Signatures.pm line 10
 MooseX::Method::Signatures::BEGIN() called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 eval {...} called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 require MooseX/Method/Signatures.pm called at /usr/share/perl5/MooseX/Declare/Syntax/MethodDeclaration.pm line 5
 MooseX::Declare::Syntax::MethodDeclaration::BEGIN() called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 eval {...} called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 require MooseX/Declare/Syntax/MethodDeclaration.pm called at /usr/local/lib/perl/5.10.1/Class/MOP.pm line 114
 Class::MOP::__ANON__() called at /usr/local/share/perl/5.10.1/Try/Tiny.pm line 71
 eval {...} called at /usr/local/share/perl/5.10.1/Try/Tiny.pm line 67
 Try::Tiny::try('CODE(0x9acde78)', 'Try::Tiny::Catch=REF(0x9a966a8)') called at /usr/local/lib/perl/5.10.1/Class/MOP.pm line 125
 Class::MOP::load_first_existing_class('MooseX::Declare::Syntax::MethodDeclaration') called at /usr/local/lib/perl/5.10.1/Class/MOP.pm line 137
 Class::MOP::load_class('MooseX::Declare::Syntax::MethodDeclaration', undef) called at /usr/local/lib/perl/5.10.1/Moose/Util.pm line 109
 Moose::Util::_apply_all_roles('Moose::Meta::Class=HASH(0x9ac6200)', undef, 'MooseX::Declare::Syntax::MethodDeclaration') called at /usr/local/lib/perl/5.10.1/Moose/Util.pm line 87
 Moose::Util::apply_all_roles('Moose::Meta::Class=HASH(0x9ac6200)', 'MooseX::Declare::Syntax::MethodDeclaration') called at /usr/local/lib/perl/5.10.1/Moose.pm line 58
 Moose::with('Moose::Meta::Class=HASH(0x9ac6200)', 'MooseX::Declare::Syntax::MethodDeclaration') called at /usr/local/lib/perl/5.10.1/Moose/Exporter.pm line 294
 Moose::with('MooseX::Declare::Syntax::MethodDeclaration') called at /usr/share/perl5/MooseX/Declare/Syntax/Keyword/MethodModifier.pm line 9
 require MooseX/Declare/Syntax/Keyword/MethodModifier.pm called at (eval 205) line 1
 MooseX::Declare::Syntax::MooseSetup::BEGIN() called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 eval {...} called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 eval 'package MooseX::Declare::Syntax::MooseSetup; use MooseX::Declare::Syntax::Keyword::MethodModifier;' called at /usr/share/perl5/aliased.pm line 50
 aliased::_load_alias('MooseX::Declare::Syntax::Keyword::MethodModifier', 'MooseX::Declare::Syntax::MooseSetup') called at /usr/share/perl5/aliased.pm line 20
 aliased::import('aliased', 'MooseX::Declare::Syntax::Keyword::MethodModifier') called at /usr/share/perl5/MooseX/Declare/Syntax/MooseSetup.pm line 8
 MooseX::Declare::Syntax::MooseSetup::BEGIN() called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 eval {...} called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 require MooseX/Declare/Syntax/MooseSetup.pm called at /usr/local/lib/perl/5.10.1/Class/MOP.pm line 114
 Class::MOP::__ANON__() called at /usr/local/share/perl/5.10.1/Try/Tiny.pm line 71
 eval {...} called at /usr/local/share/perl/5.10.1/Try/Tiny.pm line 67
 Try::Tiny::try('CODE(0x9ab31c8)', 'Try::Tiny::Catch=REF(0x9a8e398)') called at /usr/local/lib/perl/5.10.1/Class/MOP.pm line 125
 Class::MOP::load_first_existing_class('MooseX::Declare::Syntax::MooseSetup') called at /usr/local/lib/perl/5.10.1/Class/MOP.pm line 137
 Class::MOP::load_class('MooseX::Declare::Syntax::MooseSetup', undef) called at /usr/local/lib/perl/5.10.1/Moose/Util.pm line 109
 Moose::Util::_apply_all_roles('Moose::Meta::Class=HASH(0x9a054b8)', undef, 'MooseX::Declare::Syntax::MooseSetup', 'MooseX::Declare::Syntax::RoleApplication', 'MooseX::Declare::Syntax::Extending') called at /usr/local/lib/perl/5.10.1/Moose/Util.pm line 87
 Moose::Util::apply_all_roles('Moose::Meta::Class=HASH(0x9a054b8)', 'MooseX::Declare::Syntax::MooseSetup', 'MooseX::Declare::Syntax::RoleApplication', 'MooseX::Declare::Syntax::Extending') called at /usr/local/lib/perl/5.10.1/Moose.pm line 58
 Moose::with('Moose::Meta::Class=HASH(0x9a054b8)', 'MooseX::Declare::Syntax::MooseSetup', 'MooseX::Declare::Syntax::RoleApplication', 'MooseX::Declare::Syntax::Extending') called at /usr/local/lib/perl/5.10.1/Moose/Exporter.pm line 294
 Moose::with('MooseX::Declare::Syntax::MooseSetup', 'MooseX::Declare::Syntax::RoleApplication', 'MooseX::Declare::Syntax::Extending') called at /usr/share/perl5/MooseX/Declare/Syntax/Keyword/Class.pm line 7
 require MooseX/Declare/Syntax/Keyword/Class.pm called at (eval 1) line 1
 MooseX::Declare::BEGIN() called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 eval {...} called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 eval 'package MooseX::Declare; use MooseX::Declare::Syntax::Keyword::Class;' called at /usr/share/perl5/aliased.pm line 50
 aliased::_load_alias('MooseX::Declare::Syntax::Keyword::Class', 'MooseX::Declare') called at /usr/share/perl5/aliased.pm line 20
 aliased::import('aliased', 'MooseX::Declare::Syntax::Keyword::Class', 'ClassKeyword') called at /usr/share/perl5/MooseX/Declare.pm line 6
 MooseX::Declare::BEGIN() called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 eval {...} called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 require MooseX/Declare.pm called at ./myPerlProg10.pl line 3
 main::BEGIN() called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
 eval {...} called at /usr/share/perl5/MooseX/LazyRequire.pm line 10
Variable "$class" is not imported at ./myPerlProg10.pl line 12.

【问题讨论】:

    标签: perl moose


    【解决方案1】:

    这些是弃用警告(在 Moose 1.09 中引入)。您正在使用的扩展程序(或您的代码本身)正在使用将在 Moose 的某些未来版本中删除的功能。如果是导致警告的 MooseX 扩展,请查找更新版本。如果是您的代码,请修复它。

    例如,第一个警告(关于 MooseX/LazyRequire.pm 使用旧的 Moose::Util::MetaRole API)应该通过安装MooseX::LazyRequire 0.06 来修复。

    我从您对 mirod 回答的评论中看到,您从 CPAN 安装了 Moose,但从 aptitude 安装了 MooseX 模块。这就是导致您的问题的原因; Moose 的版本对于您的扩展来说太新了。要么从 CPAN 安装所有东西,要么从 aptitude 安装所有东西。为 Moose 和 MooseX::* 等密切相关的模块混合 CPAN 和 aptitude 安装可能会导致问题。

    【讨论】:

    • 非常好...我已经删除了所有与 moose 和 mooseX 相关的软件包。但是,我也通过包管理器(perl、perl-base 和 perl-modules)安装了 perl,它们的版本是:5.10.1-8ubuntu2 如果我从 CPAN shell 安装 Moose 和 MooseX,这是否会导致问题?跨度>
    • @Kaeso,我认为这不是问题。
    • 另请注意,“MooseX::* 扩展”无论如何都不是经过策划的。它们可能会或可能不会与 Moose 的弃用保持同步。除了我们已经采取的措施(包括在发布前测试所有下游模块的更改,并将此类更改通知整个社区)之外,Moose 核心团队无法(或希望)执行此操作。
    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多