Имеет массив хэшей,
my @arr = get_from_somewhere();
содержание @arr (например):
@arr = (
{ id => "id2", requires => 'someid', text => "another text2" },
{ id => "xid4", requires => 'id2', text => "text44" },
{ id => "someid", requires => undef, text => "some text" },
{ id => "id2", requires => 'someid', text => "another text2" },
{ id => "aid", requires => undef, text => "alone text" },
{ id => "id2", requires => 'someid', text => "another text2" },
{ id => "xid3", requires => 'id2', text => "text33" },
);
нужно что-то вроде:
my $texts = join("\n", get_ordered_texts(@arr) );
soo нужно написать sub, который возвращает массив text
из хэшей, - в зависимом порядке, поэтому из приведенного выше примера нужно получить:
"some text", #someid the id2 depends on it - so need be before id2
"another text2", #id2 the xid3 and xid4 depends on it - and it is depends on someid
"text44", #xid4 the xid4 and xid3 can be in any order, because nothing depend on them
"text33", #xid3 but need be bellow id2
"alone text", #aid nothing depends on aid and hasn't any dependencies, so this line can be anywhere
как вы можете видеть, в @arr могут быть некоторые дублированные "строки" ( "id2" в приведенном выше примере), нужно выводить только один раз на любой идентификатор.
Пока не указывается какой-либо пример кода, потому что у вас нет идеи, как начать.; ( Существует какой-то модуль CPAN, который можно использовать для решения?
Может ли кто-нибудь указать мне в правильном направлении?