Search code examples
perlmoosemethod-modifier

Pass variables around the around method modifier


Is it possible to pass variables between multiple calls to the around MethodModier? example (that doesn't work but hopefully conveys what I want to do)

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'
       ;
};

I'd eventually like to have these 'arounds' placed in pluggable traits, where I won't really know which ones are loaded beforehand but the final output will be neatly formatted.

It's possible that I'm thinking about this completely wrong, so other suggestions welcome.


Solution

  • Use an instance variable:

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

    (See question commments for an actual answer. I'm just reiterating it here, so I can accept an answer, thanks to:

    jmz)