我認爲你是在混淆列表和散列。一個列表基本上是一個數組...它是一組按照數字索引的元素。它的元素只能通過索引來訪問:
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, ...
所以,你真正想要的是一個哈希,其中的鍵是補丁名稱和值是patchnames的列表:
my $patch_hash = {
patchname1 => [ 'patchname2', 'patchname4' ],
patchname2 => [ 'patchname3', 'patchname4' ],
patchname3 => [ 'patchname4' ],
patchname4 => [],
};
其中每一個獨特的PATCHNAME是patch_hash
瓦特的關鍵ho的值是它的依賴列表。
正如工具暗示的那樣,如果您告訴它分割什麼分隔符,可以使用split
完成實際的解析。從那裏,你可以像填充您的哈希:
my $patch_hash = {};
while(<FILE>){
my($name, @subs) = split /[\s,]+/;
push(@{$patch_hash->{$name}}, @subs);
}
This is a nice article on Perl arrays.
This is a nice list of the functions for Perl arrays.
This is a nice article on Perl hashes.
And this is a nice summary of Perl regex.
我很抱歉,但你可以發佈一個較長版本該文件可能看起來像什麼。你說子派對可能有更多的子派對,但這是什麼意思?這是否意味着subpatch2是subpatch1的一個子版本?縮小你想要達到的目標;問題的核心是什麼? – joslinm 2012-02-08 17:50:14