_  _   ,_
/^\/^\-/ @D
~(________/ PERL.LT
|L |L
L L
Straipsniai  Funkcijos 
Funkcijos/delete - ištrina reikšmę iš hash'o

  • delete EXPR

    Kai duotas išsireiškimas, aprašantis hash, masyvo elementą, hash ar masyvo gabalą, ištrina nurodytą elementą(-us) iš hash'o ar masyvo. Masyvo atveju, jei masyvo elementai yra gale, masyvo dydis sumažės iki didžiausio elemento, kuriam exists() testas bus true (arba , jei nėra tokio elemento).

    Gražina sąrašą su tokiu pačiu elementų skaičiumi kiek kad buvo mėginama ištrinti. Kiekvienas elementas susideda arba iš ištrintojo elemento reikšmės arba neapibrėžtos vertės. Skaliariniame kontekse tai reiškia, kad bus gaunama paskutiniojo ištrinto elemento reikšmė (arba neapibrėžtumas, jei toks elementas neegzistuoja).

        %hash = (foo => 11, bar => 22, baz => 33);
        $scalar = delete $hash{foo};             # $scalar yra 11
        $scalar = delete @hash{qw(foo bar)};     # $scalar yra 22
        @array  = delete @hash{qw(foo bar baz)}; # @array  yra (undef,undef,33)

    Ištrinant iš %ENV pakeičia aplinką. Ištrinant iš hash'o, susieto su DBM failu, ištrina jo įvesties vietą iš DBM failo. Ištrinant iš sutie'into hash'o arba masyvo nebūtinai turi ką nors gražinti.

    Masyvo elemento pašalinimas iš esmės gražins tą masyvo vietą į pradinę, neapibrėžtumo stadiją. Vėliau testuojant tą patį elementą su exists(), gražins false. Įsidėmėkite, kad ištrinant masyvo elementus vidury masyvo, nebus indeksai perkelti - tam reiktų naudoti splice(). Žiūrėkite exists.

    Pavyzdys (neefektyviai) ištrina visas %HASH reikšmes ir @ARRAY:

        foreach $key (keys %HASH) {
    	delete $HASH{$key};
        }
        foreach $index (0 .. $#ARRAY) {
    	delete $ARRAY[$index];
        }

    And so do these:

        delete @HASH{keys %HASH};
        delete @ARRAY[0 .. $#ARRAY];

    Bet abu šie yra lėtesni negu kad tiesiog būtume priskyrę tuščią sarašą ar neapibrėžiant %HASH arba @ARRAY:

        %HASH = ();		# visiškai tuščias %HASH
        undef %HASH;	# pamirštame, kad %HASH apskritai kada egzistavo
        @ARRAY = ();	# visiškai tuščias @ARRAY
        undef @ARRAY;	# pamirštame, kad @ARRAY apskritai kada egzistavo

    Įsidėmėkite, kad EXPR gali būti kaprizingai komplikuotas iki pat paskutinės hash ar masyvo elemento, hash ar masyvo gabalo peržiūrėjimo operacijos:

        delete $ref->[$x][$y]{$key};
        delete @{$ref->[$x][$y]}{$key1, $key2, @morekeys};
        delete $ref->[$x][$y][$index];
        delete @{$ref->[$x][$y]}[$index1, $index2, @moreindices];
algirdas@perl.lt 2005.04.11 - $dabar