【问题标题】:Print contents filehandle hash打印内容文件句柄哈希
【发布时间】:2014-05-15 15:36:15
【问题描述】:

我有一个哈希 (%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.

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

提前致谢!

【问题讨论】:

  • 你不能打印它们是什么意思?文件句柄是对外部文件、套接字、管道等的引用,允许您访问它们。您不能打印它们 - 但您可以打印到它们。你问的是这个吗?
  • 但正如您所说,这些文件句柄是对文件名输出的引用,不是吗?我的目标是打印这些输出文件名。
  • 您使用名称作为创建文件句柄的一种方式。文件句柄不包含名称。它可能是对套接字、管道或没有文件系统名称的东西的引用。阅读stackoverflow.com/questions/2813092/… - 在某些情况下可以这样做,但并非总是如此。

标签: perl hash reference filehandle


【解决方案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,使用键来获取它的键,并遍历键以字符串化并打印对存储在每个键中的文件句柄值的引用。

【讨论】:

  • 感谢您的回复!我理解你的意思,但它正在打印我的全局引用,这些:GLOB(0xa45ef0)GLOB(0xa45e30)GLOB(0xa45fb0)
  • 这就是文件句柄。
  • 我的问题表述得很错误。我会尝试通过 mylsef 来做。谢谢@Oesor。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    相关资源
    最近更新 更多