Perl5 リファレンス



delete

【文法】

delete EXPR

【説明】

連想配列の要素、配列の要素、連想配列のスライス、配列のスライスを与えると、指定し
た要素を連想配列や配列から削除します。配列の場合においては、配列要素が最後に達す
ると、配列のサイズは、exists()関数でtrueとなる最も高い要素数に縮みます(要素が無
くなった場合には、配列の要素数は0になります。)。

また、削除された要素が返ります。要素が無くなった場合には未定義値が返ります。
$ENV{}から要素を削除すると、環境が変わります。DBMファイルに結び付けられた連想配
列から削除すると、DBMファイルからエントリーが削除されます。tie関数で結び付けられ
た連想配列や配列から削除した場合、必ずしも何かが返ってくるわけではありません。

配列要素を削除すると、実際には、削除された要素の配列位置を返します。その後、同じ
要素をexists()関数を使ってテストすると、偽が返ります。配列内で中間に位置する要素
を削除すると、それ以降の要素のインデックス番号がずれることに注意してください。こ
の場合には、splice()関数を使ってください。

(能率が悪いですが)次に示す方法で、%HASH と @ARRAY の要素すべてを削除することが
できます。

    foreach $key (keys %HASH) {
        delete $HASH{$key};
    }

    foreach $index (0 .. $#ARRAY) {
        delete $ARRAY[$index];
    }

次の方法でも同じことができます。

    delete @HASH{keys %HASH};

    delete @ARRAY[0 .. $#ARRAY];

しかし、これらはともに、%HASH や @ARRAY に空リストを割り当てたり、未定義化するよ
り処理が遅くなります。

    %HASH = ();         # 完全に空の %HASH
    undef %HASH;        # %HASHは存在しなくなります

    @ARRAY = ();        # 完全に空の @ARRAY
    undef @ARRAY;       # @ARRAYは存在しなくなります



Perl5リファレンスに戻る