2017-10-29 10 views
0

私はgit-svn Perlスクリプトをハッキングしています。私は$pathsという変数を持っていますが、それは個々のパスの配列が含まれていると思いますが、その上で反復するのは苦労しています。私の最終目標は、1つのパスに追加の属性を追加することです。このダンプ出力によって表されるハッシュにどのようにアクセスできますか?

ここにダンパ出力があります。

{ 
    "/dira" => { 
     action  => "A", 
     copyfrom_path => undef, 
     copyfrom_rev => -1 
    }, 
    "/dira/dirb" => { 
     action  => "A", 
     copyfrom_path => undef, 
     copyfrom_rev => -1 
    }, 
    "/dira/dirb/test.55mb.file" => { 
     action  => "A", 
     copyfrom_path => undef, 
     copyfrom_rev => -1 
    }, 
} 

答えて

3

その出力によれば、$pathsはハッシュへの参照のハッシュへの参照です。あなたが拡張したいパスがわかっている場合

、あなたが反復する必要はありません:あなたはすべてのパスに均等にこれをしたい場合は

$paths->{'/foo/bar'}{'my_attribute'} = 42; 

を、あなたはこれを行うことができます。

for my $attrs (values %$paths) { 
    $attrs->{'my_attribute'} = 42; 
} 

ハッシュについてはperldoc perldata、参照およびネストされたデータ構造についてはperldoc perlreftutを参照してください。

+0

キーが不要な場合は、 'keys'の代わりに' values'を使用することは、どうにか私の頭の中で決して止まらないイディオムです。私はそれを覚えなければならない。 – simbabque

+0

@simbabqueそれを使って値を変更することができます: 'for my $ v(values%h){$ v ++; } '。 'values'はエイリアスのリストを返し、' for'はループ変数を現在の項目にエイリアスするので、 '$ v'は各ハッシュ値を直接参照します。 – melpomene

+0

はい、非常に便利です。あなたがそれらを使うなら、私はそれを保存します。 :-) – simbabque

関連する問題