Ok solo per la sanità mentale, il sovraccarico non sembra funzionare per me. Non so se è la versione di Perl che ho, o la versione di overload.pm, o qualcosa di sbagliato in come l'ho implementata, ma questo codice non funziona per me.Perché "use overload" non funziona con "use namespace: autoclean"?
versione perl
This is perl, v5.10.1 (*) built for x86_64-linux-gnu-thread-multi
sovraccarico versione
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);
}
principale
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;
stampe
$VAR1 = 12900840;
La parte peggiore è che non sto ottenendo alcun tipo di avviso o errori nel registro.
UPDATE
Grazie a Freido per trovare il problema. Ho aggiornato la domanda nel caso in cui qualcun altro si imbattesse in questo.
La comunità Perl/Moose generalmente non utilizza il sovraccarico?
+1 per trovare la soluzione dopo che ho battuto la testa sulla scrivania per un'ora o due cercando di trovare il problema con il mio codice. insensati bug di libreria! – qodeninja
Ci sono stato, l'ho fatto. :) Ero abbastanza sconcertato dal tuo problema fino a quando non mi sono ricordato che 'overload' funzionava inserendo simboli magici, e mi chiedevo se' autoclean' stesse scherzando con loro. – friedo
@nodebunny, perché lamentarsi del codice di altre persone quando puoi scrivere il tuo? :) Questa domanda mi ha ispirato a scrivere [namespace :: sweep] (http://search.cpan.org/~friedo/namespace-sweep/lib/namespace/sweep.pm) che non calpesterà i tuoi sovraccarichi. Maggiori informazioni [qui] (http://blogs.perl.org/users/mike_friedman/2011/10/announcing-namespacesweep.html). – friedo