2012-11-11 2 views
0

입력 문자열 각각을 주 문자열 $food에 추가하는 concatenating do-while 루프를 만들고 있습니다. 여기 코드는 다음과 같습니다Perl : do-while 루프 이후에 인쇄 할 때 오류가 발생했습니다.

do { 
    print("\nEnter your order(-1 to end): "); 
    $order = <>; 
    chop($order); 

    if ($order != -1) { 
    $food .= " ".$order; 
    print($food); 
    } 
} while ($order != -1) 

print ($food); #PROBLEM HERE! 

문제는 내가 루프 외부 print ($food)을 넣을 때마다,이 라인의 구문 오류가 플러스 Execution of file.pl aborted due to compilation errors 메시지를 표시한다는 것입니다.

코드는 루프 내에서 print ($food)을 넣으면 작동하지만 왜이 오류가 발생하는지 궁금합니다.

+0

'컴파일 오류로 인해 file.pl이 중단되었습니다.'는 오류 메시지가 아닙니다. 실제 오류 메시지 인'script.pl 12 행의 구문 오류 "를 완전히 무시했습니다.") print "'. – ikegami

+2

안전한 버전을'chop'하지 않고'chomp'를 사용하십시오. – PSIAlt

+2

나는 일반적으로 do do while을 싫어한다. 반복마다 조건을 두 번 확인하기 때문에 여기서는 유용하지 않습니다! 내가 쓰는 것은 : while (1) {print (...); $ order = <>; 마지막으로 if! defined ($ order); chomp ($ order); 마지막으로 $ order eq -1; $ food. = "$ order"; } print "$ food \ n"; ' – ikegami

답변

3

마지막 인쇄 전의 줄에 구문 오류가 있습니다. 끝자리는 ;이 아닙니다. 그냥 추가하면 제대로 작동합니다.

+1

와우, 고마워요! do-while 루프에서';'를 잊어 버렸습니다 ... –

0

구문 오류 이외에 언급할만한 것 : 개행 문자로 문자열을 시작한다는 것을 알았습니다. 괜찮 으면 인쇄하기 전에 개행 문자로 문자열을 끝내는 것이 "더 나은"것으로 간주 될 수 있습니다. 개행 문자를 인쇄하면 곧바로 STDOUT 버퍼가 비워집니다. 대부분의 경우 이것은 지연된 출력과 텍스트 깜빡임을 방지하므로 (특히 많은 인쇄를 할 때) 원하는 동작입니다.

+0

고마워요! 프로그래밍의 우수 사례에 대한 해킹을 언제나 환영합니다. –

+1

@thekalaban 개인적으로 나는 더 많은 것이 추가되지 않는 한 항상 줄 바꿈으로 문자열을 끝내는 버릇을 만들었습니다. 나는 그것을 "모범 사례"라고 부르지는 않을 것이지만 원하는 행동을하는 경우가 더 자주 발생합니다 :) 관련 메모에서'$ | '로 결정된 자동 플러시 설정을 확인하고 싶을 수도 있습니다 – Jarmund

+0

주목! 좋아, 나도 그걸 확인해 볼게! –

관련 문제