【发布时间】:2011-06-03 18:23:07
【问题描述】:
如何获取脚本的名称?
例如,我有一个名为 XXX.pl 的 Perl 脚本。该文件包含:
$name = #some function that obtains the script's own name
print $name;
输出:
XXX.pl
我想把它比作获取脚本目录的 CWD 函数。我还需要一个获取脚本名称的函数。
【问题讨论】:
标签: perl
如何获取脚本的名称?
例如,我有一个名为 XXX.pl 的 Perl 脚本。该文件包含:
$name = #some function that obtains the script's own name
print $name;
输出:
XXX.pl
我想把它比作获取脚本目录的 CWD 函数。我还需要一个获取脚本名称的函数。
【问题讨论】:
标签: perl
【讨论】:
use File::Basename;
my $name = basename($0);
PS。 getcwd()and friends不要给你脚本的目录!他们为您提供工作目录。如果脚本在您的 PATH 中,而您只是按名称而不是完整路径调用它,那么 getcwd() 不会按照您说的做。你想要dirname($0)(目录名也在File::Basename)。
【讨论】:
dirname($0) 也给出了相对路径。如果您使用perl script 或./script 运行脚本,它将返回'.'。
您可能也有兴趣了解更多关于__FILE__ 和__LINE__ 的信息,它为您提供了当前行和我经常一起使用的信息。
如果您想将此用于调试目的,您可能还想了解“warn”、“Carp”、“caller”。
【讨论】:
查看模块FindBin,它是核心 Perl 发行版的一部分。它导出您正在寻找的变量
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
【讨论】:
这个答案有点晚了,但是 Perl 环境哈希 %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});
}
我在检查新环境时经常使用该循环。
我阅读这个问题的原因是因为我的工作使用 ActiveState Perl,并且他们没有在环境哈希中提供脚本文件名,所以我试图找到其他方法来获取它。在所有答案中,唯一在我们的环境中工作的答案是上面列出的__FILE__ 。
【讨论】: