If you check the part he quoted in the original email, that is in there. Obviously three of us missed it so maybe it could be highlighted better.
-Chris On Fri, Aug 7, 2015 at 2:28 PM, Ben Tilly <bti...@gmail.com> wrote: > Change your example to say $at->foo instead of $at->dump to see the bug. > Add a check in the around to only try to set foo if @_ actually had 3 > elements. Then the bug should go away. > I suggest that the documentation add a comment like this: > # Return the existing value if we are not trying to change it. > return $self->$orig() > unless @_; > That might keep someone else from making the same mistake. > On Fri, Aug 7, 2015 at 9:27 AM, Chris Prather <perig...@prather.org> wrote: >> 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 >> >>