如何从相对路径中获取我的Perl程序的绝对路径?
我需要找到的完整路径,我当前正在运行的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模块
这听起来像你正在寻找的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