我有一個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