2013-06-07 8 views
0

Windows XP에서 ActiveState Perl 5.10.1을 실행하고 있습니다.셰번 라인이있을 때 Perl 'hello world'가 작동하지 않음 (Windows)

다음 프로그램 실행하지만 명령 줄에서, 출력 기능은 없습니다 :

#!c:/perl/bin/perl.exe 

use strict; 
use warnings; 

print "foo\n"; 

을 내가 오두막 라인을 제거하면, 나는 예상대로 출력으로 표시 'foo는'얻을. I 경로 (perl foo.pl)를 통해 펄 참조하는 파일 연결 단 (foo.pl)을 사용하거나 직접 실행 펄 (c:\perl\bin\perl.exe foo.pl)를 참조하여 실행하면

I는 동일한 결과를 얻는다.

왜 내가 스크립트가 shebang 줄없이 작동하는지 이해할 수 없지만 shebang 줄이있을 때 출력이 표시되지 않습니다. 필자의 이해는 셰번 선이 Windows의 펄에서는 반드시 필요한 것은 아니지만 스위치를 -w과 같이 사용하려는 경우에 좋은 연습으로 간주됩니다.

명시 적으로 핸들을 만들면 아무런 차이가 없습니다. STDOUT, ie print STDOUT "foo\n";

이것은 나를 아주 미치게 만든다. 어떤 조언을 부탁드립니다.

+0

70 (아마도 바이트) – GainfulShrimp

+0

확인, Windows의 올바른 줄 끝. – ikegami

+0

그것이 차이를 만들지는 모르겠지만 마지막에 누락 된 개행 문자를 추가하고 다시 시도 할 수 있습니까? – ikegami

답변

5

내가 준 프로그램이 잘못되었습니다. 그래야만합니다.

perl -0777nE"BEGIN { binmode STDIN }; say unpack 'H*', $_" <foo.pl 

그래도 문제가 발견되었습니다. 귀하의 회선은 CRLF (0D0A) 대신 캐리지 리턴 (0D)으로 종료됩니다!

2321633a2f7065726c2f62696e2f7065726c2e6578650d 
0d 
757365207374726963743b0d 
7573652‌​07761726e696e67733b0d 
0d 
7072696e742022666f6f5c6e223b0d 
0d 

Perl은 모두 한 줄입니다. 맞습니다. 전체 프로그램은 매우 긴 세간입니다.

MacOS 라인 결말 (10 년 전 사용되지 않는 컴퓨터)에서 Windows 라인 결말로 전환하면 문제가 없어집니다.

+0

정말 고마워요. 편집> EOL 변환> Windows (메모장 + +에서)를 사용하면 프로그램이 제대로 작동한다는 것을 알게되었습니다. 나는 실수로 "Mac 모드"로 전환하는 방법에 대한 단서가 없습니다. :) – GainfulShrimp

+0

요즘 Mac (예 : OS/X)은 유닉스 줄 끝 (0A)을 사용합니다. 나는 0D를보고 매우 놀랐다! – ikegami