如何获取脚本的名称?
例如,我有一个名为XXX.pl
的Perl脚本文件,它包含以下内容:
$name = #some function that obtains the script's own name
print $name;
输出:
XXX.pl
我想把这个比作获取脚本目录的CWD函数。我需要一个能够获取脚本名称的函数。
如何获取脚本的名称?
例如,我有一个名为XXX.pl
的Perl脚本文件,它包含以下内容:
$name = #some function that obtains the script's own name
print $name;
输出:
XXX.pl
我想把这个比作获取脚本目录的CWD函数。我需要一个能够获取脚本名称的函数。
use File::Basename;
my $name = basename($0);
附注: getcwd()
以及其他函数 不能提供脚本所在的目录!它们提供的是当前工作目录。如果脚本在你的 PATH 中,并且你仅通过名称而非完整路径调用它,那么 getcwd()
将不能达到你的要求。你需要使用 dirname($0)
(File::Basename
中也有 dirname 函数)。
dirname($0)
也会返回相对路径。如果你使用perl script
或./script
运行脚本,它将返回'.'。 - felwithe请查看核心Perl发行版中的模块FindBin,它导出您需要查找的变量。
EXPORTABLE VARIABLES
$Bin - path to bin directory from where script was invoked
$Script - basename of script from which Perl was invoked
$RealBin - $Bin with all links resolved
$RealScript - $Script with all links resolved
%ENV
获取信息。由于这是我搜索时找到的唯一有用的页面,我会在这里添加我的方式以供未来的人们参考。
$ENV{'SCRIPT_FILENAME'}
提供正在运行的脚本的完整路径 /var/www/cgi-bin/perlscript.pl
$ENV{'SCRIPT_NAME'}
提供chroot路径 /cgi-bin/perlscript.pl
如果您想查看系统提供的所有环境变量,请使用以下代码:foreach $key (sort(keys(%ENV)))
{
printf("%16s : %s\n", $key, $ENV{$key});
}
__FILE__
。SCRIPT_FILENAME
通常由CGI协议提供,所以除非调用您的程序的东西已经为您设置了它,否则您不会看到它。这与Activestate与其他Perl有所不同无关。此外,__FILE__
并不需要报告文件的实际名称,因为这可以通过类似# line 42 foo.pl
的注释进行更改。请参阅perlsyn - undefined