LINUX.ORG.RU

История изменений

Исправление 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
# что и делает возвращаемый индекс правильным 
}