打印内容文件句柄哈希

时间:2014-05-15 15:36:16

标签: perl hash reference filehandle

我有一个散列(%filehandle),它将文件句柄存储为其值。但我无法打印出来。

我的哈希看起来像这样:

my %filehandle;
foreach my $output (@outputs){
  foreach my $fp (@fp_values_array){
    $filehandle{$output}{$fp}=undef;
    }
}
print Dumper \%filehandle;

$VAR1 = {

          'GMAF' => {
                      '0.05' => \*{'::$__ANONIO__'},
                      '1' => \*{'::$__ANONIO__'},
                      '0.001' => \*{'::$__ANONIO__'}
                    }
        };

我知道问题是这些值是引用,但我从perl开始,我不知道如何访问它们......

我尝试过这样的事情:

print "$_\n" for (keys ${$filehandle{GMAF}{$fp_value_array}});

但它没有用。

Type of argument to keys on reference must be unblessed hashref or arrayref at report.pl line 369, <INPUT> line 5000.

如果有人可以帮助我,我将非常感激。

先谢谢!

2 个答案:

答案 0 :(得分:1)

print "$_\n" for (keys ${$filehandle{GMAF}{$fp_value_array}});

应该是:

for my $fp_value_array (keys %{$filehandle{GMAF}}) {
    print $filehandle{GMAF}{$fp_value_array};
}

哪个取消引用存储在$filehandle{GMAF}中的hashref,使用键来获取它的键,并迭代键以字符串化并打印对每个键中存储的文件句柄值的引用。

答案 1 :(得分:0)

文件句柄没有与之关联的文件名。它们包装文件描述符。有特定于操作系统的方法从文件描述符(如果有)获取名称,但最好的办法是将名称与句柄一起放在哈希中。

{
   GMAF => {
      '0.05' => {
         fn => ...,
         fh => ...,
      },
      '1' => {
         fn => ...,
         fh => ...,
      },
      '0.001' => {
         fn => ...,
         fh => ...,
      },
   },
}