2017-10-29 64 views
0

我正在破解一個git-svn Perl腳本。我有一個$paths變量,我認爲它包含一個單獨的路徑數組,但是我很難對它進行迭代。我的最終目標是向一條路徑添加一個附加屬性。如何訪問由此自卸車輸出表示的散列?

這裏是自卸車輸出。

{ 
    "/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

如果你不需要鑰匙的話,使用'values'而不是'keys'是一個不知何故從來沒有卡在我腦海中的習語。我必須記住它。 – simbabque

+0

@simbabque它很整齊,因爲你可以用它來修改這些值本身:'爲我的$ v(值%h){$ v ++; }'。 'values'返回一個別名列表和'for'別名到當前項目的循環變量,所以'$ v'直接引用每個哈希值。 – melpomene

+0

是的,這非常有用。如果你使用它,它會保存一個箭頭,我會這樣做。 :-) – simbabque