我有一个 Perl 脚本,它读取三个文件并在读取每个文件后写入新文件。一切都是一个线程。
在这个脚本中,我打开并使用了三个文本文件,并将内容存储在一个散列中。文件很大(接近 3 MB)。
我正在使用循环遍历每个文件(打开->读取->执行一些操作(哈希表)->关闭)
我注意到每当我扫描第一个文件时,我的 Cygwin shell 中的 Perl 终端窗口都会卡住。我按下回车键的那一刻,我可以看到脚本处理其余文件没有任何问题。
这很奇怪,因为我的脚本中没有读取 STDIN。此外,相同的逻辑适用于所有三个文件,因为所有内容都在同一个循环中。
这里有没有人遇到过类似的问题?处理大文件或大哈希时通常会发生这种情况吗?
我不能在这里发布脚本,但无论如何也没有太多内容可以发布。这可能只是我的 Cygwin shell 中的一个问题吗?
如果这个问题没有消失,我该如何规避它?就像在脚本运行时提供输入一样?更重要的是,我该如何调试这样的问题?
sub read_set
{
@lines_in_set = ();
push @lines_in_set , $_[0];
while (<INPUT_FILE>)
{ $line = $_;
chomp($line);
if ($line=~ /ENDNEWTYPE/i or $line =~ /ENDSYNTYPE/ or eof())
{
push @lines_in_set , $line;
last;
}
else
{
push @lines_in_set , $line;
}
}
return @lines_in_set;
}
--------> 我想我发现了问题:- 或者 eof() 调用确保脚本会被卡住!不知何故只在第一次发生。我不知道为什么