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];