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

时间:2011-01-05 01:56:27

标签: perl

如何获取脚本的名称?

例如,我有一个名为XXX.pl的Perl脚本。该文件包含:

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

输出:

XXX.pl

我想将其比作获取脚本目录的CWD函数。我需要一个获取脚本名称的函数。

5 个答案:

答案 0 :(得分:73)

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

print $0;

man perlvar其他特殊变量。

答案 1 :(得分:42)

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

PS。 getcwd() and friends不会给你脚本的目录!他们为您提供工作目录。如果脚本在您的PATH中,并且您只是按名称而不是完整路径调用它,那么getcwd()将无法按照您的说法进行操作。您想要dirname($0)(dirname也位于File::Basename)。

答案 2 :(得分:9)

您可能还有兴趣详细了解__FILE__,可能还有__LINE__,它会为您提供当前行,我经常一起使用。

如果您希望将其用于调试目的,您可能还想了解“warn”,“Carp”,“caller”。

答案 3 :(得分:2)

查看模块FindBin,它是核心Perl发行版的一部分。它会导出您正在寻找的变量

    $create_ipn = $mysqli->prepare("INSERT INTO xxx_somewhere (some_ipn_parameter , email, domain, item) VALUES (?, ?, ?, ?)");
    $create_ipn->bind_param("ssss", $some_ipn_parameter, $email, $domain, $item);

    $some_ipn_parameter = preg_replace( '/[^\x01-\x7F]/', "", 'the_actual_ipn_data' );
    $email = 'edward@ait-pro.com';
    $domain = '';
    $item = 'Test';
    $create_ipn->execute();         

答案 4 :(得分:0)

这个答案有点晚了,但是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__