我怎样才能得到剧本的名字?例如,我有一个名为XXX.pl的Perl脚本。该文件包含:
XXX.pl
$name = #some function that obtains the script's own name print $name;
字符串输出量:
型我想把它比作获取脚本目录的CWD函数。我需要一个同时获取脚本名称的函数。
xvw2m8pv1#
运行程序的名称可以在$0变量中找到:
$0
print $0;
字符串man perlvar用于其他特殊变量。
vd8tlhqk2#
use File::Basename; my $name = basename($0);
字符串PS. getcwd()和它的朋友不会给予脚本的目录!他们会给予工作目录。如果脚本在PATH中,而你只是通过名称而不是完整路径来调用它,那么getcwd()不会执行你所说的操作。你需要dirname($0)(dirname也在File::Basename中)。
getcwd()
dirname($0)
File::Basename
11dmarpk3#
你可能也有兴趣学习更多关于__FILE__的内容,也可能是__LINE__,它提供了当前行和我经常一起使用的行,这两行都在perldata中提到过。如果您想将此用于调试目的,您可能还想了解warn、Carp、caller。
__FILE__
__LINE__
warn
Carp
caller
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
字符串
vojdkbi05#
这个答案有点晚了,但是还有另一种方法可以从Perl环境中哈希%ENV。由于这是我搜索时出现的唯一有用的页面,我将在这里添加我的方法,供将来的人使用。$ENV{'SCRIPT_FILENAME'}提供了运行/var/www/cgi-bin/perlscript.pl的脚本的完整路径$ENV{'SCRIPT_NAME'}提供chroot路径/cgi-bin/perlscript.pl如果你想查看系统提供的所有环境变量,可以使用以下代码:
%ENV
$ENV{'SCRIPT_FILENAME'}
/var/www/cgi-bin/perlscript.pl
$ENV{'SCRIPT_NAME'}
/cgi-bin/perlscript.pl
foreach $key (sort(keys(%ENV))) { printf("%16s : %s\n", $key, $ENV{$key}); }
字符串当我检查一个新的环境时,我经常使用这个循环。我之所以阅读这个问题是因为我的工作使用ActiveState Perl,他们没有在环境哈希中提供脚本文件名,所以我试图找到其他方法来获取它。在所有答案中,唯一在我们的环境中工作的是上面列出的__FILE__。
5条答案
按热度按时间xvw2m8pv1#
运行程序的名称可以在
$0
变量中找到:字符串
man perlvar用于其他特殊变量。
vd8tlhqk2#
字符串
PS.
getcwd()
和它的朋友不会给予脚本的目录!他们会给予工作目录。如果脚本在PATH中,而你只是通过名称而不是完整路径来调用它,那么getcwd()
不会执行你所说的操作。你需要dirname($0)
(dirname也在File::Basename
中)。11dmarpk3#
你可能也有兴趣学习更多关于
__FILE__
的内容,也可能是__LINE__
,它提供了当前行和我经常一起使用的行,这两行都在perldata中提到过。如果您想将此用于调试目的,您可能还想了解
warn
、Carp
、caller
。deikduxw4#
查看模块FindBin,它是核心Perl发行版的一部分。
字符串
vojdkbi05#
这个答案有点晚了,但是还有另一种方法可以从Perl环境中哈希
%ENV
。由于这是我搜索时出现的唯一有用的页面,我将在这里添加我的方法,供将来的人使用。$ENV{'SCRIPT_FILENAME'}
提供了运行/var/www/cgi-bin/perlscript.pl
的脚本的完整路径$ENV{'SCRIPT_NAME'}
提供chroot路径/cgi-bin/perlscript.pl
如果你想查看系统提供的所有环境变量,可以使用以下代码:
字符串
当我检查一个新的环境时,我经常使用这个循环。
我之所以阅读这个问题是因为我的工作使用ActiveState Perl,他们没有在环境哈希中提供脚本文件名,所以我试图找到其他方法来获取它。在所有答案中,唯一在我们的环境中工作的是上面列出的
__FILE__
。