我正在尝试将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 }}不存在,想法?
答案 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);