PERL无法从输入文件句柄读取输入

时间:2013-10-11 01:37:12

标签: perl

我遇到了Perl问题并处理输入文件。

我正在成功打开文件,但是当我尝试将文件内容打印到屏幕时,它不会打印任何内容。

如果我在尝试打印到屏幕之前对该文件名执行系统调用,那么打印到屏幕的工作原理是什么?!

不工作

    open( my $ifh, "<", "/data/$client/$product/$stream->{ fname }.SortIndex.dat" )
    or die "$product: $file could not open parm file $stream->{ fname }.SortIndex.dat: $1";

while ( <$ifh> ) {
    print $_;
}

工作

open( my $ifh, "<", "/data/$client/$product/$stream->{ fname }.SortIndex.dat" )
    or die "$product: $file could not open parm file $stream->{ fname }.SortIndex.dat: $1";

system ( "cat $stream->{ fname }.SortIndex.dat" );

while ( <$ifh> ) {
    print $_;
}

它让我塞满了,我尝试将手柄放入阵列并打印阵列的元素但没有成功。

文件句柄打开时没有错误,它只包含一行,而且是一个Unix格式的文本文件。

之前有没有人见过这种行为?

/吕

编辑:打印“$ stream-&gt; {fname} .SortIndex.dat”返回D347INVX.hold_synchk.SortIndex.dat

编辑:

print Dumper $stream;

    $VAR1 = {
        'fname' => 'D998INVX.hold_synchk'
    };

    print "/data/$client/$product/$stream->{ fname }.SortIndex.dat\n";                 
    /data/SYN/SYNINV/D998INVX.hold_synchk.SortIndex.dat

我现在也在同一个文件上执行cat:

system( "cat /data/$client/$product/$stream->{ fname }.SortIndex.dat" );

以前的行为仍然存在

1 个答案:

答案 0 :(得分:0)

大卫W让我走上了正确的道路。

在运行为下一个处理阶段打开它们的例程之前,我没有关闭我的SortIndex.dat文件。

我只能想象通过system()调用cat正在刷新缓冲区并将文件写出来。

抱歉浪费你的时间,这是一个非常漫长的一周.......

感谢大家的意见。