delete

連想配列から値を削除する

構文

解説

引数にキー付きの連想配列を指定すると、そのキーに関連する要素 (キーと値のペア) を連想配列から削除します。 そして、削除したペアの値を返します。

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