2012-03-01 8 views
8

나는 다음과 같이 @INC 출력합니다 간단한 펄 스크립트가

[[email protected]~/bin]$ ./test.pl 
/Library/Perl/5.12/darwin-thread-multi-2level 
/Library/Perl/5.12 
/Network/Library/Perl/5.12/darwin-thread-multi-2level 
/Network/Library/Perl/5.12 
/Library/Perl/Updates/5.12.3 
/System/Library/Perl/5.12/darwin-thread-multi-2level 
/System/Library/Perl/5.12 
/System/Library/Perl/Extras/5.12/darwin-thread-multi-2level 
/System/Library/Perl/Extras/5.12 
. 
[[email protected]~/bin]$ perl test.pl 
/opt/local/lib/perl5/site_perl/5.12.3/darwin-multi-2level 
/opt/local/lib/perl5/site_perl/5.12.3 
/opt/local/lib/perl5/vendor_perl/5.12.3/darwin-multi-2level 
/opt/local/lib/perl5/vendor_perl/5.12.3 
/opt/local/lib/perl5/5.12.3/darwin-multi-2level 
/opt/local/lib/perl5/5.12.3 
/opt/local/lib/perl5/site_perl 
/opt/local/lib/perl5/vendor_perl 
. 

내 질문은 : ./script.plperl script.pl으로 펄 스크립트를 실행하는 장면 뒤에 무엇이 있습니까? 무엇이 스크립트가 다른 @INC을 출력하게합니까?

+6

다른 'perl'바이너리가 있습니까? 'perl은 무엇을 말하는가? – cHao

+0

'which perl은''/ opt/local/bin/perl'이라고 말했지만, shabang은'/ usr/bin/perl'을 사용했습니다. 당신은 모두 정확합니다, 고마워요 ...하지만 나는 그걸 놓칠 수 있었어요. – neevek

+1

유닉스 수업 # 1 (팀의 모든 초보자에게). 절대 현재 디렉토리 나 PATH에 의존하지 마십시오. 항상 명시 적 경로를 사용하십시오. – DVK

답변

19

스크립트는 당면한 라인을 통해 /usr/bin에서 perl을 실행하지만, 커맨드 라인에서 스크립트를 실행하면된다 /opt/somewhere에서 다른 perl 바이너리를 사용 (which perl 경로를 참조). #!/usr/bin/env perl을 사용하면 두 옵션이 동일하게 동작합니다.

10

시스템에 두 개의 perl 설치가 있습니다.

./test.pl을 실행하면 해당 스크립트의 첫 줄에 쓰여진대로 /usr/bin/perl이 선택됩니다.

perl test.pl을 실행하면 선택한 환경 변수 PATH에있는 첫 번째 perl입니다. 위치를 알아 내기 위해 which perl을 입력하십시오.