2012-04-30 30 views
5

Có cách nào để nhận đường dẫn tuyệt đối tuyệt đối đến tệp thực thi Perl cho quy trình hiện tại không?Nhận đường dẫn tuyệt đối để thực thi perl cho quy trình hiện tại

$^X sẽ cấp cho tôi tên thực thi Perl, nhưng tài liệu tuyên bố rằng đôi khi nó sẽ là đường dẫn tương đối và điều này có vẻ đúng trên OS X chẳng hạn.

ExtUtils :: MakeMaker dường như có một số ma thuật để tìm đường dẫn tuyệt đối, vì nó tạo ra Makefile trên OS X của tôi chứa

PERL = /usr/local/bin/perl 
FULLPERL = /usr/local/bin/perl 

nhưng tôi không có ý tưởng làm thế nào nó thực hiện điều này hay điều kỳ diệu là dễ dàng tiếp cận với người khác.

CHỈNH SỬA: Cảm ơn Borodin về mẹo $Config{perlpath}. Tham lam cho điều này trong ExtUtils, tôi thấy tidbit này trong ExtUtils :: MM_Unix :: _ fixin_replace_shebang, mà tôi đoán là những gì MakeMaker sử dụng để thay thế #! Perl với dòng shebang chính xác.

 
    if ($Config{startperl} =~ m,^\#!.*/perl,) { 
     $interpreter = $Config{startperl}; 
     $interpreter =~ s,^\#!,,; 
    } 
    else { 
     $interpreter = $Config{perlpath}; 
    } 

Trả lời

8

Tôi nghĩ rằng những gì bạn đang tìm kiếm là $Config{perlpath}.

Nếu bạn muốn mã của mình rất dễ di động, bạn có thể phải thêm một loại tệp vào giá trị đó; điều này được mô tả trong tài liệu perlport. Nếu không, tất cả những gì bạn cần là:

use Config; 
my $perl = $Config{perlpath}; 
0

Perl bao gồm mô-đun lõi File::Spec có thể dịch đường dẫn tương đối thành đường dẫn tuyệt đối.

my $full_path_to_perl = File::Spec->rel2abs($^X); 
+0

Điều đó sẽ không hoạt động trong nhiều trường hợp. Thường '$^X' chỉ nói' perl' trong trường hợp 'rel2abs' sẽ cung cấp cho bạn đường dẫn đến CWD, điều này có thể là sai. – friedo

1

Bạn có thể lấy thông qua mô-đun lõi Config.

use Config; 
say $Config{perl5}; # current perl binary 

tôi nghĩ rằng nên luôn luôn chứa một đường dẫn tuyệt đối, nhưng tôi không thể đảm bảo nó.

+0

Tài liệu cho '$ Config {perl5}' khá là vô ích: "Biến này chứa đường dẫn đầy đủ (nếu có) đến một cài đặt trước đó perl5.005 hoặc sau đó thích hợp để chạy tập lệnh để xác định inc_version_list." – Telemachus

+1

Sử dụng $ Config {perl5} cung cấp cho tôi Perl đầu tiên trong PATH của tôi, trong khi $ Config {perlpath} cung cấp cho tôi Perl hiện đang thực thi. –

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