Ok, la sobrecarga de chequeo de cordura no parece funcionar para mí. No sé si es la versión de perl que tengo, o la versión de overload.pm, o algo mal con la forma en que lo he implementado, pero este código no funciona para mí.¿Por qué la "sobrecarga de uso" no funciona con "use namespace: autoclean"?
versión de Perl
This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi
versión sobrecarga
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);
}
principal
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;
impresiones
$VAR1 = 12900840;
Lo peor es que ahora no recibo ningún tipo de advertencia o errores en el registro.
ACTUALIZACIÓN
Gracias a Freido para encontrar el problema. He actualizado la pregunta por si acaso alguien más tropieza con esto.
¿La comunidad de Perl/Moose generalmente no usa sobrecarga?
+1 para encontrar una solución después de golpear mi cabeza en el escritorio durante una hora o dos tratando de encontrar el problema con mi código. tontos errores de la biblioteca! – qodeninja
estado allí, hecho eso. :) Estuve bastante desconcertado por tu problema también hasta que recordé que 'sobrecarga 'funcionaba insertando símbolos mágicos, y me pregunté si' autoclean' estaba jugando con ellos. – friedo
@nodebunny, ¿por qué reclamar el código de otras personas cuando puedes escribir el tuyo? :) Esta pregunta me inspiró a escribir [namespace :: sweep] (http://search.cpan.org/~friedo/namespace-sweep/lib/namespace/sweep.pm) que no pisoteará tus sobrecargas. Más información [aquí] (http://blogs.perl.org/users/mike_friedman/2011/10/announcing-namespacesweep.html). – friedo