我需要找到的完整路徑,我當前正在運行的Perl腳本,即如何從相對路徑中獲取我的Perl程序的絕對路徑?
的〜/ DIR/my.pl我需要它是「/ home/user中/ DIR /我特等」。
$0
會給我「〜/ dir/my.pl」。爲./my.pl我仍然需要 「/home/user/dir/my.pl」
等謝謝!
我需要找到的完整路徑,我當前正在運行的Perl腳本,即如何從相對路徑中獲取我的Perl程序的絕對路徑?
的〜/ DIR/my.pl我需要它是「/ home/user中/ DIR /我特等」。 $0
會給我「〜/ dir/my.pl」。
爲./my.pl我仍然需要 「/home/user/dir/my.pl」
等謝謝!
使用FindBin模塊:
$ cat /tmp/foo/bar/baz/quux/prog
#! /usr/bin/perl
use FindBin;
print "$FindBin::Bin/$FindBin::Script\n";
$ PATH=/tmp/foo/bar/baz/quux prog
/tmp/foo/bar/baz/quux/prog
$ cd /tmp/foo/bar/baz/quux
$ ./prog
/tmp/foo/bar/baz/quux/prog
看起來你只需要將路徑展開爲它們的絕對值。檢查this article如何做到這一點。
您不能將./my.pl擴展到任何東西,除非您知道撥打電話時的位置(即CWD) – 2009-06-23 16:17:56
這也不處理波浪擴展。 – 2009-06-23 16:20:38
你應該看看FindBin或FindBin::Real。
使用FindBin模塊
這聽起來像你正在尋找的rel2abs function in File::Spec。例如:
#!/usr/bin/perl
use File::Spec;
my $location = File::Spec->rel2abs($0);
print "$location\n";
這將在你所描述的方式解決$ 0:
$ ./myfile.pl
/Users/myname/myfile.pl
$ ~/myfile.pl
/Users/myname/myfile.pl
或者,你可以在使用方式不盡相同Cwd::abs_path。
在文件本身是符號鏈接的情況下,上述許多概念都會中斷。我通常以以下方式啓動我的腳本:
use strict;
use English;
use warnings;
use Cwd qw(realpath);
use File::Basename;
use lib &File::Basename::dirname(&Cwd::realpath($PROGRAM_NAME));
希望這會有所幫助。
是的,這是我需要的。謝謝 – 2009-06-23 16:19:18