存储在数据结构中的匿名子例程/子例程引用

Ste*_* P. 1 perl perl-data-structures

为什么我要使用Perl匿名子程序而不是命名子程序?激励我思考以下方面的优点:

  • 在数组,散列和标量中存储匿名subs.

这是一个非常酷的概念,但它在任何方面都很实用吗?我有必要使用存储在某种数据结构中的匿名子/子引用吗?或者也许是方便的情况?

我理解为什么在某些上下文中需要匿名子类,例如处理共享变量(当在另一个子元素中声明匿名子元素时),但除非我遗漏了某些内容,否则我只是看不到使用任何类型函数的意义参考.看起来我们应该直接调用函数,代码看起来会更好/更有条理.

请告诉我,我错了.我很想有充分的理由使用这些东西.

提前致谢.

小智 5

调度表可用于根据某些值动态确定要采取的步骤:

my %disp = (
   foo => sub { 'foo' },
   bar => sub { 'bar' },
);

my $cmd = get_cmd_somehow();
if (defined $disp{$cmd}) {
  $disp{$cmd}->(@args)
} else {
  die "I don't know how to handle $cmd"
}
Run Code Online (Sandbox Code Playgroud)

(方法调度通过 - > can($ method)在概念上类似,但更灵活,细节被隐藏.)

匿名函数和词法闭包有许多其他用途; 或许深入研究"高阶函数".(例如,考虑map()/ grep().)