2012-07-31 7 views
0

필자는 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() 호출이 스크립트가 멈추지 않을 것이라고 확신했습니다! 어떻게 든 처음에만 일어난다. 이유는 모르겠지만 그래도

+2

3MB는 거대한 파일을 만들지 않습니다. 우리가 당신을 도울 수 있도록 몇 가지 코드를 게시하는 것이 좋습니다. 기존 코드를 가져와 여전히 동작을 나타내는 가장 짧은 스 니펫으로 압축 한 다음 여기에 질문을 편집하여 해당 코드를 포함시킵니다. – DavidO

+0

3MB는 거대한 파일이 아닙니다. 코드를 보지 않고는 디버그 할 수 없습니다. 투표를 닫습니다. – geoffspear

+1

@Wooble : 잠시 시간을내어 업데이트하십시오. 더 많은 정보가 필요한 질문을 마무리하면 몇 분 후에 더 많은 정보를 질문에 중복해서 게시 할 수 있습니다. – Wug

답변

2

eof() 전화가 문제입니다. perldoc -f eof을 참조하십시오. 빈 괄호

eof 아무도없는 경우 @ARGV에 지정된 모든 파일 중 하나를 구성, 또는 STDINwhile (<>)를 통해 액세스 의사 파일을 의미합니다.

특히

:이 기능은 실제로 성격과 그것을이야 다음 "ungetc"를 읽

주, 그래서 상호 작용하는 상황에서 유용하지 않습니다.

그러나 루프는 다른 핸들 (INPUT_FILE)에서 읽습니다.

eof(INPUT_FILE)으로 전화하는 것이 좋습니다. 하지만 그럴 필요는 없습니다. 외부 루프는 INPUT_FILE의 끝에 도달하면 종료됩니다. perl -cw script-name는 컴파일 -을한다 (

이 스크립트의 상단에

use strict; 
use warnings; 

를 추가하고이 생산하는 모든 오류 메시지를 수정 :

좀 더 제안하지 증상이보고있는 관련 확인 만). my (perldoc -f my)을 사용하여 변수를 선언해야합니다.일관된 들여 쓰기를 사용하십시오. 나는 대부분의 Perl 문서에서 찾을 수있는 것과 동일한 스타일을 추천한다.

관련 문제