2012-02-08 54 views
1

我在這裏有一個場景,需要一些幫助。我正在編寫一個需要執行一些驗證的perl腳本。我有一個可用的文件,其中包含以下信息在perl中進行哈希操作

PATCHNAME subpatch1,subpatch2,subpatch3 ...文件

內容將被讀取並subpatches將被放置在數組中。現在,這些子派生可能包含更多的子派生,這些子派生需要使用稍後進入圖片的DFS或BFS來遍歷。 但這些subpatches需要映射到一個哈希,而這些都是從文件中讀取,即採用分體式

$list->{subpatch1} = \subpatch1 
$list->{subpatch2} = \subpatch2 
$list->{subpatch3} = \subpatch3 .... 

不利於

($a1,$2)=split; 

給我$ 2 = subpath1,subpatch2,...這需要進一步分裂..因爲我是Perl新手,所以在這裏特別困惑。

有沒有更好的方法來執行上面的操作,或者是否有任何可以實現的模塊。任何建議都會有很大的幫助。

+2

我很抱歉,但你可以發佈一個較長版本該文件可能看起來像什麼。你說子派對可能有更多的子派對,但這是什麼意思?這是否意味着subpatch2是subpatch1的一個子版本?縮小你想要達到的目標;問題的核心是什麼? – joslinm 2012-02-08 17:50:14

回答

2

我認爲你是在混淆列表和散列。一個列表基本上是一個數組...它是一組按照數字索引的元素。它的元素只能通過索引來訪問:

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.

+0

正是我在找的東西。非常感謝您瞭解需要什麼,因爲很難從這個職位中脫穎而出。 – 2012-02-10 06:47:59