2010-07-23 116 views
2

我有一個數組,我正在從它做一個哈希實例。 例如,如果數組是:由陣列確定的Perl哈希鍵

@folders=(temp,usr,bin); 

然後我要填寫的哈希:

$the_path{$folders[0]}{$folders[1]}{$folders[2]}="somevalue"; 

但是,如果數組是唯一的:

@folders=(bin); 

的話,我想的路徑成爲:

$the_path{$folders[0]}="somevalue"; 

問題是我事先不知道陣列要多長時間,並且如果該解決方案的語句嚴重縮放,我真的很想避免使x

我該怎麼做?

+1

你有'嚴格使用;使用警告;'在文件頂部,對嗎?這會爲你帶來許多錯誤。 – Ether 2010-07-23 14:45:35

回答

5

首先,這不是你如何在Perl中定義數組。你可能要說

my @folders = ('temp', 'usr', 'bin'); 

有一個老把戲從列表中進行嵌套哈希鍵:

my %the_path; 
my $tmp = \%the_path; 
foreach my $item(@folders) { 
    $tmp->{$item} = { }; 
    $tmp = $tmp->{$item}; 
} 

這將導致如下所示的結構:

$VAR1 = { 
      'temp' => { 
         'usr' => { 
           'bin' => {} 
           } 
        } 
     }; 

如果你想用字符串替換最底層的空hashref,你可以跟蹤循環內的count變量。

+0

+1打我到相同的解決方案:) – Cfreak 2010-07-23 14:39:28

+1

一如既往,我們已經有CPAN模塊。 [Data :: Diver](http://p3rl.org/Data::Diver)是我的最愛。 – daxim 2010-07-23 19:20:54