您知道如何麋导入过程中自动开启strictwarnings?我想在我的穆斯类接通autodieuse feature ':5.10'延长该行为。

我已经找到了其中驼鹿做到这一点,在Moose::Exporter,其中装配了驼鹿一个自定义import子调用strict->importwarnings->import用于调用的类。

然而,我无法找出一种方法,在一个木上下的方式扩展此导入方法。

我应该如何处理呢?

http://www.friedo.com/bullwinkle.gif

有帮助吗?

解决方案

由于有模块可以导出其功能集成到use-ING命名空间的方法很多,你可能需要做一些代码,以实现每个所需的库挖掘。什么你问的不是具体什么驼鹿,所以你可以写你或你的公司自己的最佳实践模块,该模块将设立一组标准为你一起工作,e.g。

use OurCompany::BestPractices::V1;

package OurCompany::BestPractices::V1;

use strict;
use warnings;
use feature (':5.10');
require Fatal;
require Moose;

# Required for straight implementation of autodie code
our @ISA;
push @ISA, qw(
   Fatal
);

sub import {
   my $caller = caller;
   strict->import;
   warnings->import;
   feature->import( ':5.10' );
   Moose->import ({into => $caller});

   #autodie implementation copied from autodie source
   splice(@_,1,0,Fatal::LEXICAL_TAG);
   goto &Fatal::import;
}

1;

Autodie使事情更复杂一点,因为它依赖于寻找从呼叫者使用-ER的包(),并使用GOTO,但您可能能够找到一种更好的方式与更多的测试。您实现更多,更复杂的这个库可能,但也可能是具有足够高的值,让你有一次性的解决方案,可以将所有你或你的公司的代码中使用。

其他提示

我的方法向后解决该问题。

为什么不使用工具集打造一批use报表,包括Moose,随着你的附加编译指示?

代码应该看起来像:

 # MagicMoose.pm
 package MagicMoose;

 use base 'ToolSet'; 

 ToolSet->use_pragma( qw/feature :5.10/ ); # perl 5.10
 ToolSet->use_pragma( qw/autodie/ );

 # define exports from other modules
 ToolSet->export(
     'Moose'          => undef,       # get the defaults
 );

 1; # modules must return true

我没有测试此。坦率地说,我刚刚发现ToolSet前几天,并没有机会尝试一下呢。 FWIW,所述评论是积极的。

Moose::Exporter将允许您定义您使用的是糖类的定制import方法。 MooseX::POE使用一个版本的这几年了,但在我认为一个“hackish的”时尚这样做。看着下面应约你问什么

对于Moose::Exporter文档
package Modern::Moose;
use Moose ();
use Moose::Exporter;

my ($import) = Moose::Exporter->build_import_methods(
    also => 'Moose',
    install => [qw(unimport init_meta)],
);

sub import { # borrowing from mortiz's answer for feature/mro
    feature->import( ':5.10' );
    mro::set_mro( scalar caller(), 'c3' );        
    goto &$import;
}

这随后可用于像这样

package MyApp;
use Modern::Moose;

has greeting => (is => 'ro', default => 'Hello');
sub run { say $_[0]->greeting } # 5.10 is enabled

您必须定义一个名为进口在你的包子,并导入所有有其他的东西。

从现代:: Perl的一个例子(其它策略模块你可能看):

use 5.010_000;

use strict;
use warnings;

use mro     ();
use feature ();

sub import {
     warnings->import();
     strict->import();
     feature->import( ':5.10' );
     mro::set_mro( scalar caller(), 'c3' );
}

更新:对不起,没看过的问题不够仔细

扩展现有的导入方法的一个好方法是写自己的新的包中,并从那里叫穆斯的导入方法。你可以做到这一点的子类,也许你甚至可以使用自己麋为; - )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top