Gli hash contengono coppie di scalari: il primo è la chiave, il
secondo il valore. La chiave sarà convertita in una stringa,
sebbene il valore possa essere qualunque tipo di scalare: stringa, numero
o riferimento. Se una chiave $chiave è presente in %hash,
exists($hash{$chiave}) restituirà vero. Il valore per una data
chiave può essere indefinito, nel qual caso $hash{$chiave}
sarà indefinito mentre exists $hash{$chiave} restituirà
vero. Questo accade nel caso in cui l'hash contiene ($chiave, undef).
Le figure aiutano... ecco la tabella di %hash:
chiavi valori
+------+------+
| a | 3 |
| x | 7 |
| d | 0 |
| e | 2 |
+------+------+
E valgono queste condizioni
$hash{'a'} e` vero
$hash{'d'} e` falso
defined $hash{'d'} e` vero
defined $hash{'a'} e` vero
exists $hash{'a'} e` vero (solo Perl5)
grep ($_ eq 'a', keys %hash) e` vero
Se ora eseguite
undef $hash{'a'}
la vostra tabella diventa:
chiavi valori
+------+------+
| a | undef|
| x | 7 |
| d | 0 |
| e | 2 |
+------+------+
ed ora valgono queste condizioni; i cambiamenti in maiuscolo:
$hash{'a'} e` FALSO
$hash{'d'} e` falso
defined $hash{'d'} e` vero
defined $hash{'a'} e` FALSO
exists $hash{'a'} e` vero (solo Perl5)
grep ($_ eq 'a', keys %hash) e` vero
Notate le ultime due: avete un valore indefinito ma una chiave definita!
Ora, considerate questo:
delete $hash{'a'}
la vostra tabella ora contiene:
chiavi valori
+------+------+
| x | 7 |
| d | 0 |
| e | 2 |
+------+------+
ed ora valgono queste condizioni; i cambiamenti in maiuscolo:
$hash{'a'} e` falso
$hash{'d'} e` falso
defined $hash{'d'} e` vero
defined $hash{'a'} e` falso
exists $hash{'a'} e` FALSO (solo Perl5)
grep ($_ eq 'a', keys %hash) e` FALSO
Guardate, l'intera riga è sparita!
|