Newsgroup: it.comp.lang.perl
Titolo: hashref

scusate la mia ignoranza, ma questo:
my $config = XMLin();
my %config = %$config;
si puo sicuramente fare in modo molto piu elegante.
come?

 my %config = %$config;
Perché devi ridefinirlo? $config è un reference a quell'hash. Puoi
usarlo semplicemente così:
$config->{chiave}
Più elegante di così... :)
Prova a leggerti perldoc perlref.
Ciao,
-- 
+--------+ | ASCII ribbon campaign ( ) | 
www.autistici.org/kral
|  kral  | |  - against HTML email  X  |
+--------+ |              & vCards / \ | my gpg id = 0x7C946947

|lobo| <l@b.o> wrote:

Secondo me la maniera piu` elegante e` _non_ dereferenziare la hashref.
Mi spiego meglio (e cambio nome a %config, per evitare confusione):
1: my $config = XMLin();
Ora lo scalare $config contiene un riferimento alla hashtable con 
i dati provenienti dal file XML.
                           +--------------+
                $config -> | key => value |
                           .              .
                           |     ...      |
                           +--------------+     
2: my %configurazione = %$config;
Usando $config, risali alla hash cui quest'ultimo fa riferimento:
                            %configurazione
                           +--------------+
                $config -> | key => value |
                           .              .
                           |     ...      |
                           +--------------+
 
E quindi ora puoi scrivere cose come $configurazione{ key } per
recuperare i valori della hash, eccetera eccetera...
Pero` avresti potuto usare la hashref $config sempre, usando l'operatore
"freccia", che furbescamente ho gia` rappresentato nei disegnini.
Basta scrivere $config->{ key } e si ha lo stesso effetto di
$configurazione{ key }. Ulteriori approfondimenti qui: 
 
http://pod2it.sourceforge.net/pods/perlreftut.html
Se la traduzione non ti piace, puoi rimediare facendo due cose:
1. scrivermi, dicendo cosa non era chiaro, cosa non era espresso in buon
   italiano... cose cosi`.
2. leggere l'originale :)
      perldoc perlreftut
ciao,
S.
-- 
Stefano Rodighiero      |  
http://larsen.perlmonk.org
mailto:
lar...@perl.it
   |  
http://www.perl.its


grazie per la faticaccia dell'ascii art, mi sento lusingato.
il fatto è che devo ciclare sulle keys e values dell'hashref, e 
sinceramente non saprei come fare senza dereferenziarlo.
cioè nell'xml ho una roba tipo:
<hlist>
	<item text="ciao 1" path="1"/>
	<item text="ciao 2" path="2"/>
	<item text="ciao 3" path="3"/>
</hlist>
e vorrei poi nel codice settare la proprietà "text" dell'item della 
hlist a "ciao 1" e la proprietà "path" a "1" e così via fino alla fine 
degli item nel file xml.
il problema è che il foreach oviamente non funziona, e le funzioni keys 
e values con la ref non funzionano. quindi devo dereferenziare. almeno 
credo.
ciao!

 Prova a leggerti perldoc perlref.
ciao e grazie anche a te. sto proprio leggenfo il perlref, ma ho appunto 
il problema che non conosco "chiave" a priori, quindi non posso usare 
quella sintassi. o sbaglio?

 quella sintassi. o sbaglio?
Sbagli (perché non hai letto perlreftut ;-)).
Un foreach funziona esattamente nello stesso modo, ovviamente avendo
cura di de-referenziare l'hashref in keys() (che accetta solo hash):
	foreach $k (keys (%{$hashref}))
	{
		print $hashref->{$k} . "\n";
	}
Non vedo la difficoltà, sinceramente.
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)                 [ 
http://www.emmanuelebassi.net
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 Non vedo la difficoltà, sinceramente.
si infatti. scusate se vi ho rotto.

 sinceramente non saprei come fare senza dereferenziarlo.
Certo. Devi dereferenziarlo. Quello che intendeva dirti Stefano è che non 
devi copiarne il contenuto in un secondo hash.
  for my $k ( keys %$config )
  {
       print $k, "=", $config->{$k}, "\n";
   }
Max