필자는 3 개의 파일을 읽고 각 파일을 읽은 후 새 파일을 작성하는 펄 스크립트를 가지고있다. 모든 것은 하나의 스레드입니다.Perl 스크립트가 명백한 이유없이 터미널에 갇혀있다.
이 스크립트에서는 세 개의 텍스트 파일을 열고 작업하고 해시에 내용을 저장합니다. 파일 크기가 큽니다 (3MB에 가깝습니다). 나는 내가 처음을 통해 스캔하고 할 때마다 것으로 나타 납니까 (> 닫기 -> 읽기 - -> 어떤 행동 (해시 테이블을 수행) 개방)
나는 각각의 파일을 통과하는 루프를 사용하고 있습니다 파일을 열면 Cygwin 쉘에있는 Perl 터미널 창이 멈추게됩니다. 엔터 키를 치는 순간 스크립트의 나머지 파일도 문제없이 볼 수 있습니다.
내 스크립트에 STDIN에서 읽은 것이 없으므로 매우 이상합니다. 또한 동일한 논리가 모든 파일이 동일한 루프에 있기 때문에 모든 세 파일에 적용됩니다.
여기에 비슷한 문제가있는 사람이 있습니까? 대용량 파일이나 대용량 파일을 처리 할 때 일반적으로 발생합니까?
여기에 스크립트를 게시 할 수는 없지만 어쨌든 게시하려면 그다지 많지 않습니다. 이것은 Cygwin 셸에서 문제가 될 수 있습니까?
이 문제가 해결되지 않으면 어떻게해야합니까? 스크립트가 진행 중일 때 enter 입력을 제공하는 것과 같은가? 더 중요한 것은 어떻게 이런 문제를 디버깅 할 수 있을까요?
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
3MB는 거대한 파일이 아닙니다. 코드를 보지 않고는 디버그 할 수 없습니다. 투표를 닫습니다. – geoffspear
@Wooble : 잠시 시간을내어 업데이트하십시오. 더 많은 정보가 필요한 질문을 마무리하면 몇 분 후에 더 많은 정보를 질문에 중복해서 게시 할 수 있습니다. – Wug