2010-07-23 124 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