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

Perl 从同一哈希中的另一个例程执行例程,perl,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" }, };

我试图将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内的$disp,并且$self不存在,ideas?

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

 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);

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

 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);