Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取正在运行的Perl脚本的名称_Perl - Fatal编程技术网

如何获取正在运行的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.”);这是最有用的。