biến môi trường PWD
giữ thư mục làm việc hiện tại, đây là đường dẫn tập lệnh được thực hiện từ đó.
Bạn có thể lấy đường dẫn đầy đủ của kịch bản với $ENV{PWD}
và $0
Sửa: cung cấp mẫu mã vì nó là khó khăn cho một số người tin rằng điều này là có thể:
Tôi có thể không bắt tất cả các trường hợp có thể, nhưng điều này sẽ nhận được rất gần:
use strict;
use warnings;
print "PWD: $ENV{PWD}\n";
print "\$0: $0\n";
my $bin = $0;
my $bin_path;
$bin =~ s#^\./##; # removing leading ./ (if any)
# executed from working directory
if ($bin !~ m#^/|\.\./#) {
$bin_path = "$ENV{PWD}/$bin";
}
# executed with full path name
elsif ($bin =~ m#^/#) {
$bin_path = $0;
}
# executed from relative path
else {
my @bin_path = split m#/#, $bin;
my @full_path = split m#/#, $ENV{PWD};
for (@bin_path) {
next if $_ eq ".";
($_ eq "..") ? pop @full_path : push @full_path, $_;
}
$bin_path = join("/", @full_path);
}
print "Script Path: $bin_path\n";
Output từ thử nghiệm chạy:
012.
PWD: /tmp
$0: ../home/cmatheson/test.pl
Script Path: /home/cmatheson/test.pl
PWD: /home/cam
$0: ./test.pl
Script Path: /home/cam/test.pl
PWD: /usr/local
$0: /home/cam/test.pl
Script Path: /home/cam/test.pl
PWD: /home/cam/Desktop/foo
$0: ../../src/./git-1.7.3.2/../../test.pl
Script Path: /home/cam/test.pl
"Tôi không muốn sử dụng bất kỳ các module đặc biệt" -- tại sao? Lưu ý rằng có rất nhiều mô-đun đi kèm với phân phối perl. – Ether
@ether - vì lý do tương tự tôi không thích sốt cà chua trên hotdogs tôi giả sử – CheeseConQueso