从同一哈希中的另一个例程执行例程

时间:2019-03-21 12:09:54

标签: perl

我正在尝试将Perl中有问题且冗长的代码片段替换为以下内容:

 my $disp = {
      option1 => sub { if(true){$disp->{option2}->();}},
      option2 => sub { print "opt 2\n"},
      option3 => sub { print "opt 3\n"},
      default => sub { print "default\n" },
    };

    $disp->{($disp->{$option})?$option:'default'}->(@args);

当我需要执行option2且执行在option1内部时,却出现了我的问题,但是我无法访问$disp和{{1 }}不存在,想法?

1 个答案:

答案 0 :(得分:4)

只需在上一条语句中声明变量,即可在下一条语句中使用它:

 my $disp;
 $disp = {
    option1 => sub { if(true){$disp->{option2}->();}},
    option2 => sub { print "opt 2\n"},
    option3 => sub { print "opt 3\n"},
    default => sub { print "default\n" },
 };

 $disp->{($disp->{$option})?$option:'default'}->(@args);

此外,我可能会将最后一行写为

($disp->{$option} || $disp->{default})->(@args);