So you'll need to provide a reduced example that demonstrates the behavior your showing. When I tried to reproduce (with the script below) the attribute was being set just fine.
#!/usr/bin/env perl use 5.12.1; use warnings; { package AroundTest; use Moose; has foo => ( is => 'rw' ); around foo => sub { my ( $next, $self, $seq ) = @_; $seq = uc($seq); $self->$next($seq); }; } my $at = AroundTest->new(); $at->foo('bar'); say $at->dump; On Thu, Aug 6, 2015 at 7:04 PM, Marcos Barbeitos <msbarbei...@gmail.com> wrote: > Howdy, > I looked up the behavior of the modifier 'around' in < > http://search.cpan.org/~ether/Moose-2.1600/lib/Moose/Manual/MethodModifiers.pod#Around_modifiers>, > and the code snipet is: > around 'size' => sub { > my $orig = shift; > my $self = shift; > return $self->$orig() > unless @_; > my $size = shift; > $size = $size / 2 > if $self->likes_small_things(); > return $self->$orig($size); > }; > In my code, I have: > has 'sequence' => > ( > is => 'rw' > , isa => 'Str' > , predicate => 'has_sequence' > ); > around 'sequence' => sub > { > my $orig = shift; > my $self = shift; > my $sequence = uc shift; > # Do lots of things with $sequence and then > return $self->$orig( $sequence ); > } > But the attribute is not set. > I've tried lots of variations of the last line: > $self->$orig( $sequence ); > return $orig->( $self, $sequence ); > $orig->( $self, $sequence ); > return $sequence; > With no success, as expected. However, if I do: > around 'sequence' => sub > { > my $orig = shift; > my $self = shift; > return $self->$orig( @_ ); > } > The attribute is set and life goes on. Of course, that does not work for me > because I need to do a bunch of things to the argument passed to this > method. > Any ideas about the reasons for the (apparent?) discrepancy in behavior? > Best wishes and thanks in advance. > -- > Marcos S. Barbeitos > Departamento de Zoologia - Sala 360 > Setor de Ciências Biológicas > Universidade Federal do Paraná > Caixa Postal 19020 > Curitiba, PR 81531-990 > Brazil > Phone: (55 41) 3361-1634