加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 如何扩展Moose的自动语法输出?

发布时间:2020-12-15 22:01:53 所属栏目:大数据 来源:网络整理
导读:您知道在导入过程中Moose如何自动打开严格的警告?我想通过打开autodie并在我的Moose类中使用功能“5.10”来扩展这个行为. 我已经跟踪Moose在Moose :: Exporter中的位置,Moose :: Exporter组装了Moose的自定义导入子,它为调用类调用strict- import和warnings
您知道在导入过程中Moose如何自动打开严格的警告?我想通过打开autodie并在我的Moose类中使用功能“5.10”来扩展这个行为.

我已经跟踪Moose在Moose :: Exporter中的位置,Moose :: Exporter组装了Moose的自定义导入子,它为调用类调用strict-> import和warnings-> import.

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

我该如何处理?

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

解决方法

由于模块可以通过多种方式将其功能导出到使用命名空间中,因此可能需要执行一些代码挖掘才能实现每个所需的库.你所要求的不是什么具体的Moose,所以你可以写你自己或你公司自己的最佳实践模块,这将建立一组标准,让你工作,例如.
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,Fatal::LEXICAL_TAG);
   goto &Fatal::import;
}

1;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读