如何从相对路径获取Perl程序的绝对路径?

n-a*_*der 3 perl relative-path

我需要找到我正在运行的Perl脚本的完整路径,即

  • 对于〜/ dir/my.pl我需要它是"/home/user/dir/my.pl".该$0给我"〜/ DIR/my.pl".

  • 对于./my.pl我仍然需要"/home/user/dir/my.pl"

等等谢谢!

Gre*_*con 6

使用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
Run Code Online (Sandbox Code Playgroud)


Rya*_*ght 5

听起来你正在寻找File :: Spec中rel2abs函数.例如:

#!/usr/bin/perl

use File::Spec;
my $location = File::Spec->rel2abs($0);
print "$location\n";
Run Code Online (Sandbox Code Playgroud)

这将以您描述的方式解决$ 0:

$ ./myfile.pl
/Users/myname/myfile.pl
$ ~/myfile.pl
/Users/myname/myfile.pl
Run Code Online (Sandbox Code Playgroud)

或者,您可以以完全相同的方式使用Cwd :: abs_path.