Нужно так:
Есть список, в нём лежат ссылки на элементы хэша:
my $h={split //,q(abcdefghijklmn)};
my $a=[map \$h->{$_}, keys $h] ;
При удалении каких-то элементов из хеша хотелось бы, чтобы и в $a удалялись элементы... автомагически.
delete @{$h}{qw(a c m g)};
print Dumper $a;
Однако же:
$VAR1 = [
\'f',
\'d',
\'l',
\'b',
\'h',
\'n',
\'j'
];
Если не удалять, а делать undef элементов хеша - ситуация уже становится полегче (можно виртуозно грепать список), вот только одна беда: таких списков over дофига, т.е. на самом деле $a является «одним-из-миллиарда» элементов другой структуры данных - и при удалении элементов из хеша проходить по всем таким спискам - это эпичнейший геморрой.
В принципе можно попробовать заморочиться вместо списка с tied-хэшем, у которого в качестве ключей выступают прямо ссылки на элементы другого хеша. Но... по-моему это уже совсем эпичное извращение.
А есть ещё какие-то варианты? Как обеспечить некоторую связность структур данных, при которой если удаляются элементы из одной структуры - они исчезают из другой тоже?