Tak tohle se mi zda opravdu nefer!

Ondrej Koala Vacha koala na fi.muni.cz
Středa Prosinec 1 22:54:33 MET 1999


On Wed, 1 Dec 1999, Martin Caslavsky wrote:

> Narazil jsem na takovejhle skriptik
> 
> $h{prvni}{vek} = 100;
> $h{prvni}{plat} = 1000;
> $h{druhy}{vek} = 200;
> $h{druhy}{plat} = 2000;
> %vyber = ( prvni => "a", treti => "c");
> 
> foreach $key (sort keys %vyber) {
>  if (exists $h{$key}{vek}) {
>   # .....
>  }
> }
> 
> print scalar keys %h;
> 
> Vysledkem je 3, tedy do hashe se v prubehu testovani prida dalsi klic.
> Nevim, ale me osobne to prijde jako rana pod pas -- opatrne na to saham,
> podminkou jenom tak otuknu, a po projeti podminky mi perl pohotove vytvori
> dalsi polozku.
> Uz vim, ze spravne (aby to fungovalo :) musi ta podminka byt jenom
>     if (exists $h{$key})
> ale chci se zeptat, jestli vam tohle chovani prijde normalni? Vzdyt to za
> chvili muzu cekat, ze se mi stane to samo kdyz udelam if exists $hash{$key}
> a sup uz ho tam mam!
> 


V if (exists $h{$key}{vek}) se ptate, zda existuje klic 'vek' v dane
hashi. Jelikoz hash neexistuje, perl ho vytvori (tak jako jindy), aby mohl
ten test provest. exists je test na _klic_, nikoli na hash samotny.


---
Ondrej Koala Vacha



Další informace o konferenci Perl