如何将非OO函数模块包装到moose类中

如何将非OO函数模块包装到moose类中,moose,Moose,几个月前,我开始使用驼鹿 我使用的一些非OO模块只是由相关函数组成的。我想在Moose类中使用这些函数作为方法。这可能是最简单的方法 #!/usr/bin/env perl package FuncPack; sub func_1 { print "-> ", __PACKAGE__, "::func_1 called \n"; } package FuncClass; use Moose; use namespace::autoclean; sub func_1 {

几个月前,我开始使用驼鹿

我使用的一些非OO模块只是由相关函数组成的。我想在Moose类中使用这些函数作为方法。这可能是最简单的方法

#!/usr/bin/env perl

package FuncPack;

sub func_1 {
    print "-> ", __PACKAGE__, "::func_1 called \n";
}

package FuncClass;
use Moose;
use namespace::autoclean;

sub func_1 {
    my $self = shift ;
    return FuncPack::func_1(@_);
}

__PACKAGE__->meta->make_immutable;


package main;

my $obj = FuncClass->new();    
$obj->func_1(); # shall call FuncPack::func_1 
对于一个功能来说,这可能是可以的,但如果你有很多,这是一个重复的任务和无聊。 有没有更聪明的方法来实现它?可能有类似于MooseX::NonMoose或MooseX::InsideOut的东西用于扩展非Moose类


感谢您的建议或提示。

Moose通常不会处理这个问题,在OO框架中包装非OO模块似乎有点奇怪。不过,若您有一个方法列表(或可以生成一个),您可以执行以下操作:

package FuncClass;
use Moose;

my @list = qw( func_1 func_2 func_3 ... );
for my $method in @list {
   __PACKAGE__->meta->add_method(
       $method => sub { my $s = shift; FuncPack::$method(@_)  
   });
}
您可以使用类似于
Package::Stash
的方法从
FuncPack
中拉出函数列表


我想知道你为什么要这么做?您的
FuncClass
将绝对不携带任何状态,并且除了添加一层间接寻址之外,实际上没有其他用途。

谢谢。这就是我要找的。我的例子太简单了,只是为了弄清楚我需要什么。我现在还没碰过meta的东西。我想是时候了;-)。