_  _   ,_
/^\/^\-/ @D
~(________/ PERL.LT
|L |L
L L
Straipsniai  Funkcijos 
Funkcijos/each - pasiima kitą key/value porą iš hash'o
  • each HASH

    Kai iškviečiamas sąrašo kontekste, gražina dviejų elementų sąrašą, susidedantį iš rakto ir reikšmės kitam hash'o elementui, taip, kad būtų galima jį perkartoti. Kai iškviečiamas skaliariniame kontekste, gražina tik raktą sekančiam hash'o elementui.

    Įrašai grąžinami atsitiktine tavarka. Tikroji "atsitiktinė tvarka" žada būti keičiama ateinančiose perlo versijose, bet garantuotai bus tokiu išsidėstymu kaip kad keys ar values funkcijos rezultatas tokiame pačiame (nepakeistame) hash'e. Nuo Perl 5.8.1 išdėstymas yra skirtingas netgi tarp skirtingų Perl paleidimų saugumo sumetimais (žr. "Algorithmic Complexity Attacks" perlsec'e).

    Kai hash'as visiškai nuskaitytas, tuščias masyvas yra grąžinamas sąrašo kontekste (kuris, kai priskirtas, žymi false (0 ) reikšmę), ir undef skaliariniame kontekste. Sekantis kreipimąsis į each vėl pradės iteraciją. Yra vienas iteratorius kiekvienam hash'ui, kuriuo dalinąsi visi each, keys, ir values funkcijų iškvietimai programoje; tai gali būti nuresetinta nuskaitant visus hash elementus ar prilyginant keys HASH arba values HASH . Jei iteracijos metu pridedami ar ištrinami elementai, gali būti, kad įrašai dubliuosis arba išvis bus praleisti, taigi taip daryti nepatartina. Išimtis: visada saugu ištrinti paskutinį elementą, gražintą each(), kas reiškia, kad šis kodas veiks:

            while (($key, $value) = each %hash) {
              print $key, "\n";
              delete $hash{$key};   # Saugu
            }

    Kitas pavyzdys išveda tą patį kaip ir printenv(1) programa - environmentą, tik skirtinga tvarka:

        while (($key,$value) = each %ENV) {
    	print "$key=$value\n";
        }

    Taip pat žr. keys, values ir sort.

algirdas@perl.lt 2005.04.11 - $dabar