我有一个Perl脚本读取三个文件并在读取每个文件后写入新文件。一切都是一个线程。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()调用确保脚本将被卡住!不知何故只发生在第一次。我不知道为什么
3MB并不是一个巨大的文件。我建议你发布一些代码,以便我们可以帮助你。把你现有的代码放到最短的代码片段中,然后编辑你的问题来包含代码。 – DavidO 2012-07-31 21:30:13
3MB不是一个巨大的文件。我们无法查看代码就无法进行调试;投票结束。 – geoffspear 2012-07-31 21:30:15
@Wooble:给他一分钟更新它。只有需要更多信息的关闭问题才会提示用户在几分钟后冗余地发布问题并提供更多信息。 – Wug 2012-07-31 21:34:05