我想将一些OO包中的subs放入一个数组中 - 也在包中 - 用作调度表.像这样的东西
package Blah::Blah;
use fields 'tests';
sub new {
my($class )= @_;
my $self = fields::new($class);
$self->{'tests'} = [
$self->_sub1
,$self->_sub2
];
return $self;
}
_sub1 { ... };
_sub2 { ... };
Run Code Online (Sandbox Code Playgroud)
我不完全确定这个的语法?
$self->{'tests'} = [
$self->_sub1
,$self->_sub2
];
Run Code Online (Sandbox Code Playgroud)
要么
$self->{'tests'} = [
\&{$self->_sub1}
,\&{$self->_sub2}
];
Run Code Online (Sandbox Code Playgroud)
要么
$self->{'tests'} = [
\&{_sub1}
,\&{_sub2}
];
Run Code Online (Sandbox Code Playgroud)
我似乎无法在OO包中使用它,而在程序方面它非常简单,我没有找到OO的任何示例.
Iain非常感谢任何帮助
我确定这在文档的某个地方有所涉及,但我一直无法找到它......我正在寻找能够在类名称存储在哈希中的类上调用方法的语法糖(而不是简单的标量):
use strict; use warnings;
package Foo;
sub foo { print "in foo()\n" }
package main;
my %hash = (func => 'foo');
Foo->$hash{func};
Run Code Online (Sandbox Code Playgroud)
如果我首先复制$hash{func}到标量变量,那么我可以调用Foo->$func就好......但是缺少什么来启用Foo->$hash{func}它?
(编辑:我不是要通过在类上调用一个方法来做任何特殊的事情Foo- 这可能很容易成为一个受祝福的对象(在我的实际代码中);它只是更容易编写一个自包含的使用类方法的示例.)
编辑2:为了完整性,请回答下面的评论,这就是我实际在做的事情(这是在Moose属性糖库中,用Moose :: Exporter创建的):
# adds an accessor to a sibling module
sub foreignTable
{
my ($meta, $table, %args) = @_;
my $class = 'MyApp::Dir1::Dir2::' . $table;
my $dbAccessor = lcfirst $table;
eval "require $class" or do { die "Can't load $class: $@" };
$meta->add_attribute( …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何迭代子程序refs数组.
这个语法出了什么问题?
use strict;
use warnings;
sub yell { print "Ahh!\n"; }
sub kick { print "Boot!\n"; }
sub scream { print "Eeek!\n"; }
my @routines = (\&yell, \&kick, \&scream);
foreach my $routine_ref (@routines) {
my &routine = &{$routine_ref};
&routine;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!