-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Ottobre 2013

Dom Lun Mar Mer Gio Ven Sab
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Cerca






 

« links for 2008-12-13 | Home | I Perl Monger arrivano a Milano »

Te le do io le hash...
15.12.08

... ma questa volta me le hanno date loro!

In un test di un modulo che sto mettendo a punto avevo qualcosa del genere (ovviamente sto semplificando parecchio!):

my %hash = (
   primo => 1,
   secondo => 2,
   terzo => 3,
);
my $elemento;
while (my ($chiave, $valore) = each %hash) {
   $elemento = $chiave;
}
print $elemento eq 'terzo' ? "ok\n": "not ok\n";

Certo, messa così è facile vedere quanto sia stato stupido... ma non cerco scuse, era facile da vedere anche nel codice originale.

Per chi si fosse distratto, o magari stia abusando un po' troppo di panettoni ed affini, l'errore consiste nel fatto di assumere che gli elementi nella hash siano memorizzati (e quindi iterati da each) nello stesso ordine in cui li abbiamo inseriti. SBAGLIATO. Una hash è una struttura dati ottimizzata per fare certe cose, e questo implica che abbia tutta la libertà di organizzare i dati come meglio crede. E sì che l'avevo anche scritto...

Sbagliando s'impara, comunque, e non solo a non ripetere l'errore. Per una (s)fortunata coincidenza, il test sopra funzionava veramente sul mio computer, ma quando ho inserito il modulo in CPAN, il servizio automatico di test mi ha riso in faccia! Dunque ho re-imparato qualcosa che già sapevo: fare i test è buona cosa, e CPANTESTERS è un servizio spettacolare.

Inviato da polettix il 15.12.08 12:03
Ti è piaciuto questo articolo? Iscriviti al feed!










Devo ricordare i dati personali?






D:
Sull'autore...
D:
La ML di Perl.it
Iscriviti! mongers@lists.perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
D:
Annunci Google