2011-12-29 3 views
0

필자는 인터넷 자습서를 통해 펄을 가르치고 있으며, 대부분 잘 돌아가고 모든 것이 원활하게 진행됩니다. 그러나, 나는 어떤 주석이나 무엇을 할 수 없으며, 프로그램이 제대로 돌아 가지 않을 것입니다. 예를 들어, 다음 코드는 : 그냥이Perl5의 의견으로 프로그램이 중단됩니까?

print "Estimation of Pi"; 

실행되고 인쇄가에 의미가 있는지 동안

#eee 
print "Estimation of Pi"; 

은 아무것도 인쇄 실행,하지만하지 않습니다.

내가 뭘 잘못하고 있니? 나는 이것을 전혀 이해하지 못한다.

또한 사이드 노트에 #!/usr/bin/perl은 무엇이 필요합니까? 내 프로그램이 제대로 작동하지 않는 것 같습니다. (덧글을 달면 프로그램도 함께 작동하지 않습니다.)

+2

'perl -v' return 무엇이 있습니까? –

+0

어떻게 Perl 스크립트를 실행하고 있습니까? 어떤 환경에 있습니까? – sarnold

+1

''# ''로 입력하는 문자에 대해 어떤 가치가 있습니까? 예를 들어,''od -c file.pl' '을하면,''#''이 보이나요? 이상적으로, 문자 대 16 진 덤프를 수행하는 경우 '#' '0x23 코드가 있습니까? 나는 그것이 무엇이 될지 모르지만, 당신이보고있는 이상한 행동입니다. '#!/usr/bin/perl' (shebang) 표기는'perl file.pl' 대신'file.pl'을 입력하면 올바른 프로그램 ('/ usr/bin/perl')이 처형되다. –

답변

3

내가 파일 당신이 그것을하지 무슨 생각을 포함하지 않는 생각한다. 아마도 당신은 LF 또는 CRLF 대신 CR을 가졌을 것입니다.

>perl -e"binmode STDOUT; print qq{#eee\rprint qq{foo\\n}}" | perl 

>perl -e"binmode STDOUT; print qq{#eee\nprint qq{foo\\n}}" | perl 
foo 

>perl -e"binmode STDOUT; print qq{#eee\r\nprint qq{foo\\n}}" | perl 
foo 

하거나 다음 명령을 악화에서 16 진수 편집기로 파일을 검사 :

perl -0777nE"BEGIN { binmode STDIN } say join ' ', unpack '(A2)*', unpack 'H*', $_" < file 

#!는 유닉스 개념이다. Windows에서는 사용하지 않지만 Perl은 해당 행에서 명령 행 옵션을 찾습니다. 예를 들어, 다음은 경고합니다 :

#!perl -w 
print undef; 
+0

감사합니다.이 문제가 해결되었습니다. – morgoe

+0

비슷한 문제가있는 사람이있을 경우를 대비하여 메모장 ++을 사용하여 .pl 파일을 편집하고있었습니다. 나는 View -> Show Symbols -> Show End Of Line을 사용하여 끝 부분에 CR을 보여주었습니다. 그런 다음 편집 -> EOL 형식 -> Windows를 사용하여 변경했습니다. – morgoe

1

상당히 이상하게 들립니다. 어떻게 그 프로그램을 실행하고 있습니까? Windows 스타일의 개행을 기대하지만 문제를 일으킬 유닉스 스타일의 개행 문자를 생성하는 텍스트 편집기로 프로그램을 작성하는 시스템에서이 프로그램을 실행하는 경우. 텍스트 편집기가 창에있는 경우 창 스타일의 뉴 라인을 사용하도록 구성되었는지 확인하십시오.

#!/usr/bin/perl는 주석이 아닙니다. 그걸 세번 (shebang) 라인이라고하고 유닉스 시스템에서 텍스트 파일을 실행하면 (즉, chmod +x filename.pl) perl filename.pl이 아닌 ./filename.pl으로 실행하면 시스템은 맨 처음 줄에서 찾아서 찾으면, 전체 파일을 해당 파일에있는 유틸리티 (이 경우 /usr/bin/perl)로 전달합니다. 이것은 유닉스 시스템에서만 유용하며 스크립트를 실행 가능하게 만들고 싶을 때만 유용하다.

또 다른 tip - perl은 print에 전달 된 모든 것을 출력 버퍼로 사용합니다. 즉, print 개행 (\n)으로 끝나지 않으면 버퍼 (일반적으로 perl에서 필요한 것이 아닌)를 플러시하거나 개행을 포함하는 내용을 인쇄하거나 프로그램을 종료 할 때까지 버퍼에 보관됩니다. 프로그램에 $| = 1;을 추가하여이 기능을 무시할 수는 있지만 메시지를 줄 바꿈으로 끝내는 것이 가장 좋습니다. 그렇지 않으면 화면이 어지럽게 정리됩니다.

+0

죄송합니다.이 정보는 OP에 입력해야합니다. ActivePerl 64bit와 함께 Windows 64bit를 사용하고 있습니다. 커맨드 라인을 통해 스크립트가 저장된 디렉토리로 이동하고 'test.pl'로 간단히 실행합니다. 더 많은 정보를 추가하겠습니다. – morgoe

+6

[shebang] (http://en.wikipedia.org/wiki/Shebang_%28Unix%29)입니다. Crunchbang은 리눅스 배포판입니다. – ikegami

+0

허. Crunchbang은 그들의 로고로'#!'을 사용합니다. 나는 항상 그것들의 이름을 따서 명명했다고 생각했습니다. – Dan

1

스크립트를 쉘 스크립트로 실행하고 Perl 스크립트가 아니라 $PATHprint 명령이있을 수 있습니다. 이것은 당신이 유닉스와 비슷한 환경에 있다고 가정합니다. (밝혀졌지만 실제로는 Windows가 아닙니다.하지만이 대답은 다른 사람들에게 유용 할 수 있습니다.)

printecho으로 변경하면 어떻게됩니까? echo은 유효한 Perl 명령이 아니기 때문에 여전히 작동한다고 생각하면 아마 맞을 것입니다.

스크립트의 첫 줄은

#!/usr/bin/perl 

이 "오두막이"당신이 이름을 실행할 때 스크립트를 실행하는 방법을 시스템에 알려줍니다이어야합니다. 또는 명시 적 perl 그것을 실행할 수 있습니다

perl ./script_name