如何使用哈希在Perl中创建回调函数(调度表)?

前端之家收集整理的这篇文章主要介绍了如何使用哈希在Perl中创建回调函数(调度表)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想调用一个动态调度其他函数的主控制器函数,如下所示:

package Controller;

my %callback_funcs = ();

sub register_callback{
   my ($class,$callback,$options) = _@;
   #apppend to %callback_funcs hash ... ?
}

sub main{
%callback_funcs = ( add => 'add_func',rem => 'remove_func',edit => 'edit_func');  
  while(<STDIN>){
     last if ($_ =~ /^\s*$/);
     if($_ == 'add' || _$== 'rem' || _$== 'edit'){
        $result = ${callback_funcs['add']['func']}(callback_funcs['add']['options']);
     }
  }
}

sub add_func{
...
}

需要注意的是,subs是在其他模块中定义的,因此回调必须能够引用它们……加上
我很难让哈希合适!

解决方法

因此,可以使用包含可以从stdin调用的匿名子例程的哈希.

my %callbacks = (
    add => sub {
        # do stuff
    },fuzzerbligh => sub {
        # other stuff
    },);

您可以在哈希中插入更多哈希值:

$callbacks{next} = sub {
    ...
};

你会调用这样一个

$callbacks{next}->(@args);

要么

my $coderef = $callbacks{next};
$coderef->(@args);

您可以从STDIN或其他任何地方获取哈希键.

您也可以非自然地定义它们,然后引用它们.

sub delete {
    # regular sub definition
}

$callbacks{delete} = \&delete;

但是,我不打算称这些回调.回调是在另一个子例程返回后调用的子函数.

您的代码也充斥着语法错误,这可能会掩盖这里的深层问题.我还不清楚你在尝试使用第二级数组做什么.你什么时候定义这些潜艇,谁在什么时候使用它们?

猜你在找的Perl相关文章