Передать переменные вокруг модификатора метода - PullRequest
1 голос
/ 15 августа 2010

Можно ли передавать переменные между несколькими вызовами в around MethodModier ?пример (это не работает, но, надеюсь, передает то, что я хочу сделать)

sub mysub { ... };

around 'mysub' => sub {
   my $orig = shift;
   my $self = shift;

   my $value = get_value;

   $self->orig(@_);
};

around 'mysub' => sub {
   my $orig = shift;
   my $self = shift;
   my $value = shift;

   my $output
       = "sometext $value"
       . $self->orig(@_);
       . 'someothertext $value'
       ;
};

Я бы в конечном итоге хотел бы поместить эти «окружения» в вставные черты, где я не буду точно знать, какие из нихзагружаются заранее, но окончательный результат будет аккуратно отформатирован.

Возможно, я думаю об этом совершенно неправильно, поэтому другие предложения приветствуются.

Ответы [ 2 ]

0 голосов
/ 27 декабря 2010

Используйте переменную экземпляра:

$self->{value} = get_value;
...
my $value = $self->{value};

( См. Комментарии к вопросу для фактического ответа. Я просто повторяю его здесь, чтобы я мог принять ответ, благодаря:

jmz)

0 голосов
/ 16 августа 2010

То, что вы пытаетесь сделать, не имеет логики.

"Модификатор окрестности получает исходный метод в качестве первого аргумента, затем объект и, наконец, любые аргументы, передаваемые методу."

https://metacpan.org/pod/Moose::Manual::MethodModifiers#BEFORE-AFTER-AND-AROUND

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...