Хорошо, просто для проверки работоспособности перегрузка не кажется работает на меня. Я не знаю, какая у меня версия perl, или версия overload.pm, или что-то не так с тем, как я ее реализовал, но этот код у меня не работает.
perl version
This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi
overload version
perl -Moverload -e 'print "$overload::VERSION\n";'
1.07
Token.pm
package Token;
use namespace::autoclean;
use Data::Dumper;
use Moose;
use Moose::Util::TypeConstraints;
use overload '+' => \&_overload_add, fallback => 1;
has 'secretvalue' => ( is => 'rw', isa => 'Int');
sub _overload_add{
my ( $one, $two ) = @_;
my $value = $one->secretvalue() + $two->secretvalue();
return ($value);
}
main
use strict;
use warnings;
use Token;
my $t = Token->new( secretvalue => 17, key => 'x' );
my $t2 = Token->new( secretvalue => 12, key => 'y' );
my $x = $t + $t2;
print $x;
выводит
$VAR1 = 12900840;
Хуже всего то, что я не получаю никаких предупреждений или ошибок в журнале.
ОБНОВЛЕНИЕ
Спасибо Freido за обнаружение проблемы. Я обновил вопрос на случай, если кто-то еще наткнется на это.
Сообщество Perl / Moose обычно не использует перегрузку?