你知道如何驼鹿自动打开strict和warnings导入过程中?我希望通过启用autodie和use feature ':5.10'在我的Moose类中扩展该行为.
我已经跟踪了Moose在这里做的事情,Moose::Exporter其中组装了importMoose的一个自定义子组件,用于调用strict->import和warnings->import调用类.
但是,我无法找到一种以Moose-ish方式扩展此导入方法的方法.
我该怎么处理?
我的方法可以向后解决问题.
为什么不使用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,评论是积极的.
由于模块可以通过多种方式将其函数导出到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,但您也许可以通过更多测试找到更好的方法。您实现的越多,这个库可能就越复杂,但它可能具有足够高的价值,让您拥有可以在您或您公司的所有代码中使用的一次性解决方案。