文件打开和阅读的perl哈希

时间:2012-05-30 20:57:30

标签: perl hash io

无论出于什么原因,我都被迫尝试一些大的有序文件处理,我开始尝试使用以下方式的文件散列:

my %fo=();#File operations hash
foreach my $fn("file1","file2","file3","file4"){
        open($fo{$fn}{"if"},"<","$fn") or die ("Error open input file $fn: $!");#Input file
        $fo{$fn}{"v"} = <$fo{$fn}{"if"}>;#read one record
}

所以当我打印Dumper(\%fo)时:

$VAR1 = {
      'file1' => {
                   'v' => undef,
                   'if' => \*{'::$__ANONIO__'}
                 },
      'file2' => {
                   'v' => 'GLOB(0x8f5f098)',
                   'if' => \*{'::$__ANONIO__'}
                 },
      'file3' => {
                   'v' => undef,
                   'if' => \*{'::$__ANONIO__'}
                 },
      'file4' => {
                   'v' => 'GLOB(0x8edf1e0)',
                   'if' => \*{'::$__ANONIO__'}
                 }
    };

我的问题是,当“指针”是哈希时,如何正确读取文件?文件正在正确打开,文件不是空的,但是我没有在Dumper输出中找到这些行,我不确定如何/从GLOB中解释什么(哈希)。

感谢。

1 个答案:

答案 0 :(得分:1)

<...>可以是readline(...)glob('...')的快捷方式。你希望它成为前者,但在这种情况下它就是后者。

您可以使用

readline( $fo{$fn}{"if"} )

<{$fo{$fn}{"if"}}>          # Add curlies around the expression.

use IO::Handle qw( );       # Not needed in 5.14+
$fo{$fn}{"if"}->getline()

解决您的问题。