Я думаю, что вы путаете списки и хэши. Список - это в основном массив ... это набор элементов, которые индексируются по номеру. Доступ к его элементам возможен только по индексу:
my $list = [ 'foo', 'bar', 'baz' ];
print $list->[0], "\n"; #prints foo
print $list->[2], "\n"; #prints baz
Хеш - это коллекция, индексированная по ключу, который вы решаете. Элементы ищутся этим ключом (в отличие от индекса, как в списке):
my $hash = { fookey => "foo", barkey => "bar", bazkey => "baz" };
print $hash->{'fookey'}, "\n"; # prints foo
print $hash->{'barkey'}, "\n"; # prints bar
Если я правильно понимаю ваше требование, вы ищете способ хранения данных в следующей форме:
patchname1 --relies on--> patchname2, patchname2, ...
Итак, что вам действительно нужно, так это один хеш, где ключи - это названия патчей, а значения - списки патчейнов:
my $patch_hash = {
patchname1 => [ 'patchname2', 'patchname4' ],
patchname2 => [ 'patchname3', 'patchname4' ],
patchname3 => [ 'patchname4' ],
patchname4 => [],
};
Где каждое уникальное patchname является ключом в patch_hash
, значение которого является списком его зависимостей.
Как подсказывает инструмент, фактический анализ можно выполнить с помощью split
, если вы укажете ему, на какие разделители делить. Оттуда вы можете заполнить ваш хэш что-то вроде:
my $patch_hash = {};
while( <FILE> ){
my( $name, @subs ) = split /[\s,]+/;
push( @{$patch_hash->{$name}}, @subs );
}
Это хорошая статья о массивах Perl.
Это хороший список функций для массивов Perl.
Это хорошая статья о хэше Perl.
И это хорошее резюме регулярного выражения Perl.