2012-03-01 28 views
8

Tôi có một kịch bản Perl đơn giản mà in ra @INC như sau:Perl, Tại sao @INC khác nhau?

#!/usr/bin/perl 
print $_, "\n" for @INC; 

tôi thực thi kịch bản theo 2 cách khác nhau với ./test.plperl test.pl, sản lượng như sau:

[[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 
. 

My câu hỏi là: những gì đằng sau hậu trường để thực hiện một kịch bản perl với ./script.plperl script.pl? điều gì khiến kịch bản xuất ra khác nhau @INC?

+6

Các tệp nhị phân 'perl' khác nhau? 'Perl' nói gì? – cHao

+0

'mà perl' nói'/opt/local/bin/perl', nhưng tôi đã sử dụng '/ usr/bin/perl' cho shabang. tất cả các bạn đều chính xác, cảm ơn ... nhưng tôi có thể đã bỏ lỡ điều đó ... – neevek

+1

Bài học Unix # 1 (mà tôi cung cấp cho tất cả những người mới trong nhóm). KHÔNG BAO GIỜ EVER EVER dựa vào thư mục hiện tại hoặc PATH. LUÔN LUÔN sử dụng đường dẫn có đủ điều kiện rõ ràng. – DVK

Trả lời

19

Các kịch bản được thực hiện perl từ /usr/bin qua dòng công việc, nhưng tung ra các kịch bản từ dòng lệnh sử dụng một perl nhị phân khác nhau, từ /opt/somewhere (xem which perl cho đường dẫn). Bạn có thể sử dụng #!/usr/bin/env perl để làm cho cả hai tùy chọn hoạt động giống nhau.

10

Bạn có hai cài đặt perl trên hệ thống của mình.

Khi bạn thực thi ./test.pl, đó là /usr/bin/perl được chọn, như được viết trên dòng đầu tiên của tập lệnh.

Khi bạn thực hiện perl test.pl, đó là perl đầu tiên được tìm thấy trong biến môi trường PATH được chọn. Nhập which perl để khám phá vị trí của nó.

Các vấn đề liên quan