如何获取正在执行的Perl脚本的完整路径?

186

我有一个Perl脚本,需要在执行期间确定脚本的完整路径和文件名。我发现取决于如何调用脚本,$0会有所不同,有时包含fullpath+filename,有时只有filename。由于工作目录也可能会变化,我想不出一种可靠地获取脚本fullpath+filename的方法。

有人有解决方案吗?


我知道这是很久以前的事情了,但我只是在寻找一种在Windows上使用Perl完成此操作的方法,并且对我的解决方案感到非常满意。#!/usr/bin/perl -w my @catalog=dir; $myHome = substr($catalog[3],14); $myHome = &rtrim($myHome); print qq(<$myHome>\n);

右侧修剪函数以删除尾随空格

sub rtrim { my $string = shift; $string =~ s/\s+$//; return $string; } 只是想分享一下。
- user1210923
23个回答

0

在Windows上,同时使用dirnameabs_path对我来说效果最好。

use File::Basename;
use Cwd qw(abs_path);

# absolute path of the directory containing the executing script
my $abs_dirname = dirname(abs_path($0));
print "\ndirname(abs_path(\$0)) -> $abs_dirname\n";

这就是为什么:

# this gives the answer I want in relative path form, not absolute
my $rel_dirname = dirname(__FILE__); 
print "dirname(__FILE__) -> $rel_dirname\n"; 

# this gives the slightly wrong answer, but in the form I want 
my $full_filepath = abs_path($0);
print "abs_path(\$0) -> $full_filepath\n";

-2

$^X 有什么问题吗?

#!/usr/bin/env perl<br>
print "This is executed by $^X\n";

会提供正在使用的 Perl 二进制文件的完整路径。

Evert


1
它提供了Perl二进制文件的路径,而脚本需要的是脚本路径。 - Putnik

-5
在*nix系统中,你可能会使用"whereis"命令,在$PATH路径下查找具有给定名称的二进制文件。如果$0不包含完整的路径名,则运行whereis $scriptname并将结果保存到变量中,就可以知道脚本的位置了。

这样做行不通,因为$0也可能返回文件的相对路径:../perl/test.pl。 - Lathan
如果可执行脚本不在PATH中,会发生什么? - Znik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接