【问题标题】:How to get the name of Perl script that is running如何获取正在运行的 Perl 脚本的名称
【发布时间】: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


    【解决方案1】:

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

    print $0;
    

    man perlvar 用于其他特殊变量。

    【讨论】:

    • 有时运行的程序不是pl文件,而是加载并运行pl文件的批处理作业。如果你的文件名和你的包名相似,打印 "(" . caller . ")";是最有用的。
    【解决方案2】:
    use File::Basename;
    my $name = basename($0);
    

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

    【讨论】:

    • 这是不正确的; dirname($0) 也给出了相对路径。如果您使用perl script./script 运行脚本,它将返回'.'。
    【解决方案3】:

    您可能也有兴趣了解更多关于__FILE____LINE__ 的信息,它为您提供了当前行和我经常一起使用的信息。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-29
          • 2011-03-12
          • 2014-01-18
          • 2010-11-25
          • 2014-05-03
          • 1970-01-01
          • 2022-08-23
          • 2014-03-06
          相关资源
          最近更新 更多