我需要找到我正在运行的Perl脚本的完整路径,即
对于〜/ dir / my.pl我需要它是“/home/user/dir/my.pl”。 $0
会给我“〜/ dir / my.pl”。
for ./my.pl我仍然需要“/home/user/dir/my.pl”
等。谢谢!
答案 0 :(得分: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
答案 1 :(得分:5)
听起来你正在寻找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。
答案 2 :(得分:2)
您应该查看FindBin或FindBin::Real。
答案 3 :(得分:1)
看起来你只需要将路径扩展到它们的绝对值。检查this article了解如何执行此操作。
答案 4 :(得分:0)
使用FindBin模块
答案 5 :(得分:0)
如果文件本身是符号链接,则提到的许多概念都会中断。我通常以下列方式启动脚本:
use strict;
use English;
use warnings;
use Cwd qw(realpath);
use File::Basename;
use lib &File::Basename::dirname(&Cwd::realpath($PROGRAM_NAME));
希望这有帮助。