如何获取脚本的名称?
例如,我有一个名为XXX.pl
的Perl脚本。该文件包含:
$name = #some function that obtains the script's own name
print $name;
输出:
XXX.pl
我想将其比作获取脚本目录的CWD函数。我需要一个获取脚本名称的函数。
答案 0 :(得分:73)
答案 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__
。