Мне не совсем ясно, что именно вы пытаетесь сделать.Если вы просто хотите удалить элемент из хеша, delete $hash{$key};
- это все, что вам нужно.
Если вы хотите удалить элемент из массива и не оставить этот индекс неопределенным, тогда вы можете использовать splice @array, $index, 1;
который удалит элемент и сдвинет все после него на одну позицию вниз.
Если вы хотите просто удалить элемент из массива, но оставить остальную часть списка в покое, вы можете просто отменить его определение: $array[$index] = undef;
Это то же самое, что делает delete $array[$index]
, но использование delete
в индексе массива не рекомендуется.
Редактировать :
Если вам нужно найти объект в массиве и затем удалить его, лучше всего использовать firstidx
из List :: MoreUtils, например,
use List::MoreUtils 'firstidx';
my $obj = get_object_to_delete();
my $index = firstidx { $_ eq $obj } @array;
splice @array, $index, 1;
Предполагается, что объекты преобразуются в нечто подходящее для сравнения на равенство.Если они перегружены, используйте что-то вроде refaddr
из Scalar :: Util для непосредственного получения числового ссылочного адреса.