2009/3/20 Fernando Vezzosi
<fv@linuxvar.it>
On Fri, Mar 20, 2009 at 04:04:30PM +0100, 0bscure wrote:
> Domanda per chi si diletta di Perl almeno al livello monaco corrotto
er.
> Il dato di input e' composto da un'associazione univoca NN STRINGA
> del tipo:
> 11 PERL
> 2 LINUX
>
> (Il separatore tra i due campi e' a mia discrezione)
>
> Ora qual'e' secondo voi la struttura dati tranquilla adatta per una
> memorizzazione per accesso sequenziale? (Non ho un db)
> Io pensavo ad un array a 2 dimensioni.
> Da qui il problema:
>
> [cut]
> while (<SPOOL>)
> {
> chomp;
Se sei sicuro che l'ultimo carattere è sempre \n puoi usare chop.
> ($str, $banned) = split(/;/);
> push(@BANLIST,$str,$banned);
Così stai pushando due elementi. Questo dovrebbe essere:
push @BANLIST, [ $str, $banned ]; # arrayref
oppure
push @BANLIST, { $str => $banned }; # hashref
in questo modo mantieni l'ordine in cui leggi gli elementi, e ci accedi
semplicemente con
- $banlist[0]; # [ "LINUX", 11 ] oppure { LINUX => 11 }
- $banlist[0]->[0]; # "LINUX"
- $banlist[0]->{LINUX}; # 11
A seconda di quale delle prime due hai usato. Ma la vera domanda è:
dopo che li hai salvati in ordine cosa ci devi fare? Ci sono molte
altre soluzioni.
Grazie mille a tutti!!
push @BANLIST,[$str,$banned]; funziona e grazie a Data::Dumper vedo che il contenuto e' come volevo.
Cosa ci devo fare? con un po' di astrazione devo... dato un elenco di corrispondenze <numero;nome> creare una lista di quelle da ignorare. (..e imparare un po il Perl anche lol)
Ad esempio:
Leggo la banlist:
7;nodo16
11;nodo1
11;nodo6
4;nodo9
7;nodo1
la memorizzo e la scorro quando devo verificare ad esempio per il flusso 11 quali sono i nodi da ignorare.
Se hai qualcosa di meglio da consigliarmi accetto piu' che volentieri...
Tnx
Andrea
ps:
(Sorry forse anche la mia arriva in html di mail... ma come cavolo si forza l'invio solo txt su gmail!!)