如何获取正在运行的Perl脚本的名称

mo49yndu  于 12个月前  发布在  Perl
关注(0)|答案(5)|浏览(191)

我怎样才能得到剧本的名字?
例如,我有一个名为XXX.pl的Perl脚本。该文件包含:

$name = #some function that obtains the script's own name
print $name;

字符串
输出量:

XXX.pl


我想把它比作获取脚本目录的CWD函数。我需要一个同时获取脚本名称的函数。

xvw2m8pv

xvw2m8pv1#

运行程序的名称可以在$0变量中找到:

print $0;

字符串
man perlvar用于其他特殊变量。

vd8tlhqk

vd8tlhqk2#

use File::Basename;
my $name = basename($0);

字符串
PS. getcwd()和它的朋友不会给予脚本的目录!他们会给予工作目录。如果脚本在PATH中,而你只是通过名称而不是完整路径来调用它,那么getcwd()不会执行你所说的操作。你需要dirname($0)(dirname也在File::Basename中)。

11dmarpk

11dmarpk3#

你可能也有兴趣学习更多关于__FILE__的内容,也可能是__LINE__,它提供了当前行和我经常一起使用的行,这两行都在perldata中提到过。
如果您想将此用于调试目的,您可能还想了解warnCarpcaller

deikduxw

deikduxw4#

查看模块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

字符串

vojdkbi0

vojdkbi05#

这个答案有点晚了,但是还有另一种方法可以从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__

相关问题