2012-02-08 37 views
1

私はここにシナリオがあり、助けが必要です。私はいくつかのバリデーションを実行する必要があるperlスクリプトを書いています。私は、ファイルの情報perlのハッシュ操作

patchname subpatch1、subpatch2、subpatch3 ...

コンテンツが読み込まれ、サブパッチは、アレイに配置されることになっている次のものが含まれ使用可能なファイルを持っています。現在、これらのサブパッチは、後でピクチャに入るDFSまたはBFSのいずれかを使用してトラバースする必要があるより多くのサブパッチを含むことができます。

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

すなわち しかし、これらのサブパッチは、これらのファイルから読み込まれながら、ハッシュにマッピングする必要があり、分割を使用して

($a1,$2)=split; 

は、私に$ 2 = subpath1、subpatch2を与える...これは役立ちませんがさらに分割する必要があります。私はperlを初めて使って以来、本当に混乱しています。

上記のアクションを実行するためのより良い方法がありますか、これを達成するために使用しているモジュールがあるかどうかです。どんな提案も大きな助けになるでしょう。

+2

私は申し訳ありませんが、あなたは長いバージョンを投稿することができますファイルがどのように見えるかを示します。サブパッチにさらにサブパッチがあるかもしれないと言っていますが、それはどういう意味ですか?これは、サブパッチ2がサブパッチ1のサブパッチであることを意味しますか?達成しようとしているものを正確に絞り込みます。問題の核心は何ですか? – joslinm

答えて

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, ... 

だから何が本当に欲しいのはキーがパッチの名前と値であり、1つのハッシュは、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

まさに私が探していたものです。ポストからの作成が困難なために必要なことを理解してくれてありがとう。 –

4

あなたは、複数の区切り文字で分割できます。

my ($name, @subs) = split /[\s,]+/; 

perldoc -f split

関連する問題