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