我有一个Perl脚本,需要在执行期间确定脚本的完整路径和文件名。我发现取决于如何调用脚本,$0
会有所不同,有时包含fullpath+filename
,有时只有filename
。由于工作目录也可能会变化,我想不出一种可靠地获取脚本fullpath+filename
的方法。
有人有解决方案吗?
在Windows上,同时使用dirname
和abs_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";
$^X
有什么问题吗?
#!/usr/bin/env perl<br>
print "This is executed by $^X\n";
会提供正在使用的 Perl 二进制文件的完整路径。
Evert
dir
; $myHome = substr($catalog[3],14); $myHome = &rtrim($myHome); print qq(<$myHome>\n);右侧修剪函数以删除尾随空格
sub rtrim { my $string = shift; $string =~ s/\s+$//; return $string; } 只是想分享一下。 - user1210923