Nell'hash il valore che fa riferimento alla chiave è di tipo stringa, quindi quando estraggo le chiavi e le metto in un array avrò un array che non è @array=(10,11,12) ma @array=("10",11","12");Originariamente inviato da Mich_
Adesso e` un po' che non uso piu` Perl, ma mi pare che le hash non possano venir ordinate.
Puoi ordinare una matrice, ma non un hash.
Cioe`: l'ordine della hash e` una cosa interna al programma, ma su cui non puoi farci conto.
La hash serve per trovare un valore data la chiave.
Comunque prova a dare in ingresso piu` dati e con ordine diverso, e vedi poi se noti lo stesso problema (che tu hai attribuito all'ordinamento ASCII, ma che io non ritengo corretto).
%eta=( Alberto => 28,Invece puoi ordinare un vettore.
Quindi dovresti prima copiare la hash in un vettore (nel tuo caso vettore di vettori, ovvero matrice a due indici) e poi ordinare il vettore esterno.
Inoltre se usi la funzione sort, e` sicuramente piu` performante, rispetto alla tua funzione di ordinamento.
Stefano => 31,
Luca => 20,
Sandro => 21);
@k = keys(%eta);
@v = values(%eta);
estrando le chiavi e i valori in due array la posizione 0 di @k è Alberto, la posizione 0 di @v è 28, la 1 @k è Stefano e la 1 di @v è 31 e così via, quindi se ordino con sort @v mi perdo la corrispondenza, perchè alla posizione 0 dell'array valori non corrisponderà più la più posizione 0 dell'array chiavi e quindi l'unico modo in cui potrei riordinare tutto è estrarre le chiavi corrispondenti dalla tabella di hash, ma in questo caso non so come fare, per questo avevo adottato una specie di bubblesort
Ok, userò lo strict, ma in perl le variabili non devono essere dichiarate.PS: credo che ti convenga usare lo strict, e fare in modo che eventuali warning ti vengano segnalati: le variabili tu non le dichiari, e questo ti puo` anche portare a problemi "strani" di cui non riesci poi a capire la sorgente.
Non ho problemi strani, so benissimo da cosa deriva, cioè ordinamento di un array con numeri in formato stringa.