相关疑难解决方法(0)

如何在Perl OO模块中实现调度表?

我想将一些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非常感谢任何帮助

oop perl

10
推荐指数
3
解决办法
1344
查看次数

如何在Perl中调用存储在哈希中的函数名?

我确定这在文档的某个地方有所涉及,但我一直无法找到它......我正在寻找能够在类名称存储在哈希中的类上调用方法的语法糖(而不是简单的标量):

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)

syntax perl attributes reference moose

8
推荐指数
1
解决办法
1898
查看次数

如何在Perl中迭代/取消引用子例程引用数组?

我试图弄清楚如何迭代子程序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)

提前致谢!

perl iterator function

4
推荐指数
1
解决办法
1286
查看次数

标签 统计

perl ×3

attributes ×1

function ×1

iterator ×1

moose ×1

oop ×1

reference ×1

syntax ×1