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

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

发布时间:2020-12-16 06:11:34 所属栏目:大数据 来源:网络整理
导读:我想调用一个动态调度其他函数的主控制器函数,如下所示: package Controller;my %callback_funcs = ();sub register_callback{ my ($class,$callback,$options) = _@; #apppend to %callback_funcs hash ... ?}sub main{%callback_funcs = ( add = 'add_fun
我想调用一个动态调度其他函数的主控制器函数,如下所示:

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;

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

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

(编辑:李大同)

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

    推荐文章
      热点阅读