История изменений
Исправление Olegymous, (текущая версия) :
Ну а кто мешает передать индекс?
Что-то типа того (пcевдокодом)
my $index = Index->new();
my $l; $l=[map { my $i = $index->inc(); on_destroy($h->{$_}, sub { splice @$l, $index->withdraw($i), 1 }); \$h->{$_} } keys $h];
package Index;
sub inc {
# возврат следующего индекса
# и также складываем его во внутреннюю переменную - массив
# дабы сохранить верность индексов после удаления элементов
}
sub withdraw {
# возвращает правильный индекс по переданному из внутреннего массива
# и уменьшает в нем все элементы правее на 1
# что и делает возвращаемый индекс правильным
}
Исходная версия Olegymous, :
Ну а кто мешает передать индекс?
Что-то типа того (пcевдокодом)
my $index = Index->new();
my $l; $l=[map { my $i = $index->inc(); on_destroy($h->{$_}, sub { splice @$l, $index->withdraw($i), 1 }); \$h->{$_} } keys $h];
package Index;
sub inc {
# возврат следующего индекса
# и также складываем его во внутреннюю переменную - массив
# дабы сохранить верность индексов после удаления элементов
}
sud withdraw {
# возвращает правильный индекс по переданному из внутреннего массива
# и уменьшает в нем все элементы правее на 1
# что и делает возвращаемый индекс правильным
}