如何获取正在运行的Perl脚本的名称
如何获取脚本的名称 例如,我有一个名为如何获取正在运行的Perl脚本的名称,perl,Perl,如何获取脚本的名称 例如,我有一个名为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); PS.getcwd()不要给你脚本的目录!他们给你工作目录。如果脚本在您的路径中,您只是按
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);
PS.
getcwd()
不要给你脚本的目录!他们给你工作目录。如果脚本在您的路径中,您只是按名称而不是按其完整路径调用它,那么getcwd()
将不会执行您所说的操作。您需要dirname($0)
(dirname也位于文件::Basename
)中。运行程序的名称可以在$0
变量中找到:
print $0;
对于其他特殊变量。您可能也有兴趣了解更多关于
\uuuuu文件\uuuuuuu
,以及可能的\uuuuuu行\uuuuuuu
,这将提供您和我经常一起使用的当前行
如果出于调试目的需要此功能,可能还需要了解“警告”、“Carp
”、“调用者”
”、签出模块,它是核心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\u FILENAME'}
提供您正在运行的脚本的完整路径/var/www/cgi-bin/perlscript.pl
$ENV{'SCRIPT\u NAME'}
提供chroot路径/cgi-bin/perlscript.pl
如果要查看系统提供的所有环境变量,请使用以下代码:
foreach $key (sort(keys(%ENV)))
{
printf("%16s : %s\n", $key, $ENV{$key});
}
在检查新环境时,我经常使用该循环
我阅读这个问题的原因是因为我的工作使用ActiveState Perl,而它们在环境哈希中不提供脚本文件名,所以我试图找到其他方法来获取它。在所有答案中,在我们的环境中唯一有效的答案是上面列出的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu这是不正确的dirname($0)
还提供了相对路径。如果使用perl script
或/script
运行脚本,它将返回“.”。有时运行的程序将不是pl文件,而是加载并运行pl文件的批处理作业。如果文件名与包名相似,请打印“(.caller.”);这是最有用的。