如何扩展Moose的自动pragma导出?

fri*_*edo 10 perl moose mop

你知道如何驼鹿自动打开strictwarnings导入过程中?我希望通过启用autodieuse feature ':5.10'在我的Moose类中扩展该行为.

我已经跟踪了Moose在这里做的事情,Moose::Exporter其中组装了importMoose的一个自定义子组件,用于调用strict->importwarnings->import调用类.

但是,我无法找到一种以Moose-ish方式扩展此导入方法的方法.

我该怎么处理?

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

dao*_*oad 5

我的方法可以向后解决问题.

为什么不使用ToolSet创建一组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
Run Code Online (Sandbox Code Playgroud)

我没有测试过这个.坦率地说,我刚刚在ToolSet几天前找到了,并且还没有机会尝试一下.FWIW,评论是积极的.


jso*_*son 3

由于模块可以通过多种方式将其函数导出到use-ing 命名空间中,因此您可能需要进行一些代码挖掘才能实现每个所需的库。您所要求的并不是 Moose 特有的任何内容,因此您可以编写您或您公司自己的最佳实践模块,该模块将为您建立一组可供使用的标准,例如

use OurCompany::BestPractices::V1;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

Autodie 使事情变得更加复杂,因为它依赖于从 caller() 查找用户的包并使用 goto,但您也许可以通过更多测试找到更好的方法。您实现的越多,这个库可能就越复杂,但它可能具有足够高的价值,让您拥有可以在您或您公司的所有代码中使用的一次性解决方案。