如何使用哈希在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; 但是,我不打算称这些回调.回调是在另一个子例程返回后调用的子函数. 您的代码也充斥着语法错误,这可能会掩盖这里的深层问题.我还不清楚你在尝试使用第二级数组做什么.你什么时候定义这些潜艇,谁在什么时候使用它们? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |