如何使用perl构建哈希表

时间:2013-11-01 17:12:11

标签: perl hash

我正在尝试使用构建读取文件列表的哈希表,并将每个值存储到哈希中,如下所示: - 打开目录并将它们列在数组中 - 然后打开每个文件并从每个文件中获取一些值并将它们放入带有表的表中 文件名,总计,通过和失败到哈希表

#!/usr/bin/perl
use strict;

my $dir = "../result";
opendir(DIR, $dir) or die $!;
my %result = ();

while (my $file = readdir(DIR)) {
   # We only want files
   next unless (-f "$dir/$file");

   # do something here and get some value from each file
   $total = $worksheet->get_cell(0,1);
   $pass  = $worksheet->get_cell(1,1);
   $fail  = $worksheet->get_cell(2,1);

   # Print the cell value when not blank
   $total = $total->value();
   $pass = $pass->value();
   $fail = $fail->value();


   %result = (
              "name"  => "$file", 
              "total" => "$total", 
              "pass"  => "$pass",
              "fail"  => "$fail"
   );

}

foreach my $key (keys %result) {
   print "Key: $key, Value: $result{$key}\n";
}

当我通过forloop运行它时,我只获得目录中的最后一个条目或最后一个文件,如何添加和构建使用键和键跟踪所有文件的哈希值?上面提到的价值.. 提前谢谢..

2 个答案:

答案 0 :(得分:1)

您只获得最后一个值,因为每次循环都会覆盖%result的值。

听起来你想要一个哈希数组而不是一个哈希值。这样的事情怎么样:

my @results;
while (my $file = readdir(DIR)) {
    ...
    my %file_result = (
        "name"  => "$file", 
        "total" => "$total", 
        "pass"  => "$pass",
        "fail"  => "$fail"
    );

    push @results, \%file_result;
}

答案 1 :(得分:1)

在哈希中存储您想要的内容:

而不是:

   %result = (
              "name"  => "$file", 
              "total" => "$total", 
              "pass"  => "$pass",
              "fail"  => "$fail"
   );

每次都替换整个哈希, 尝试类似的事情:

$result{$file} = "$total $pass $fail";

在这种情况下,哈希的键将是文件名, 和值连接其他值的字符串。

您还可以使哈希的元素更复杂, 就像一个包含这三个值的数组,或者你可能需要的任何值。