Выполнить процедуру из другой процедуры в том же хеше - PullRequest
1 голос
/ 21 марта 2019

Я пытаюсь заменить проблемный и длинный фрагмент кода в 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 нет, идеи?

1 Ответ

4 голосов
/ 21 марта 2019

Просто объявите переменную в предыдущем выражении, чтобы вы могли использовать ее в следующем:

 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...