Newsgroup: it.comp.lang.perl
Titolo: Hash e Net::POP3 (lunghetto e cervellotico)

Salve a tutti... sto provando a scrivere un semplice CGI che consenta di
controllare la posta da una pagina web.
Il modulo Net::POP3 include alcune istruzioni per questo scopo ma non riesco
a capire come usarne alcune...
Esempio:
pop->popstat();
legge lo stato della casella indicata ritornando due valori, numero di
messaggi e dimensione complessiva dei messaggi....
Usando la seguente sintassi riesco a visualizzare quanto mi interessa...
@array=pop->popstat();
print "Numero messaggi: $array[0]";
print "Dimensione totale: $array[1]";
Dopo aver verificato che c'e' posta, vorrei poterla vedere... (!!) il
comando per ottenere la lista dei messaggi e'
pop->list();
Questa meraviglia, dovrebbe connettere il server pop3, e ritornare un
riferimento ad hash in cui le chiavi sono i numeri dei messaggi ed i valori
corrispondenti sono le dimensioni dei singoli messaggi... Come faccio a
visualizzare questi dati???
Se uso
@array=pop->list();
print "Lista: $array[0]";
viene visualizzato "Lista: HASH(0x80ce2fc)" (Uh? !?!?)
Se uso
%array=pop->list();
print "Lista: $array{0};
Non viene visualizzato niente.... (Lista:        ).
Come posso fare per trattare i dati estratti da questa funzione? Ho provato
a cercare qualche esempio di uso di questi benedetti hash, ma non ho trovato
niente di "chiaro"... tutti descrivono la differenza tra @array e %array ma
nessuno fa un esempio pratico... (sigh!) Qualcuno di voi potrebbe
gentilmente suggerire qualcosa? Mi basta anche un link dove poter andare a
leggere qualcosa.... Grazie a tutti! :-)
--
Enrico Pozzobon
----------------------------------------------------
BBS OSI Overhead
35010 Cadoneghe (PD)
049-8875895 - 
enr...@bbsosi.it
----------------------------------------------------

 print "Lista: $array{0};
Forse perche le chiavi iniziano da 1 e non da 0? :-)
Il POP3 numera i messaggi a parire da 1 e non da 0, comunque considera 
che non e' detto che tutti i numeri da 1 a $numero_di_messaggi siano le 
chiavi:
 list ( [ MSGNUM ] )
           If called with an argument the list returns the size
           of the message in octets.
 
           If called without arguments a reference to a hash is
           returned. The keys will be the MSGNUM's of all
           undeleted messages and the values will be their size
           in octets.
Quindi se hai dei messaggi segnati come cancellati non ti ritornera i 
dati relativi ad essi.
Usa la funzione "keys" per avere un array che contiene le chiavi 
dell'hash:
%hash=pop->list();
foreach $numero_mess (sort {$a<=>$b} keys %hash) {
        print "Messaggio $numero_mess, Dimensione $hash{$numero_mess}\n";
}
-- 
Saluti,
Giancarlo

 viene visualizzato "Lista: HASH(0x80ce2fc)" (Uh? !?!?)
   Giustamente: in un contesto di "stringa", un /reference/ viene 
trasformato in qualcosa di leggibile che lo descriva.
--
Alla prossima,
Marco

 /reference/, quindi cio` che tu devi usare e`:
E' vero ritorna una reference... mi era sfuggito.....
si pou' dereferenziare anche cosi':
%hash=%{$pop->list()};
se non ti serve la refernza e' pi' pratico per maneggiare l'hash.
-- 
Saluti,
Giancarlo

Ora ho capito come funziona!! :-)
Grazie mille a tutti...
