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 <[email protected]>
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