連想配列から値を削除する
引数にキー付きの連想配列を指定すると、そのキーに関連する要素 (キーと値のペア) を連想配列から削除します。 そして、削除したペアの値を返します。
delete
によって要素を削除した場合、exists
でキーの存在をチェックすると偽を返すことになります。
一方、Perl の連想配列は、値に未定義値をセットしても、その要素は連想配列から削除されませんので注意してください。
未定義値を持ったキーが今なお存在することになります。
つまり、exists
を使って存在をチェックしても真を返します。
次のサンプルコードは、連想配列から一つのキーを削除し、その削除したキーの値を出力します。
my %hash = ( taro => 10, jiro => 20, saburo => 30 );
my $val = delete $hash{jiro};
print $val; # 20
delete
に連想配列のスライスを指定して、複数のキー・値ペアをまとめて削除することができます。
この場合、リストコンテキスト (戻り値をリストとして受け取る状況) で利用すると、削除したキーとペアを交互に格納した配列が返ります。
my %hash = ( taro => 10, jiro => 20, saburo => 30 );
my @vals = delete %hash{ 'taro', 'saburo' };
print join( ', ', @vals ); # taro, 10, saburo, 30