如何在perl中获取程序名称

时间:2014-12-03 09:18:13

标签: perl

根据“perltrap”中C程序员的部分以及我用Google搜索的所有内容,我应该使用“$ 0”来获取Perl中的程序名称。但是,当我运行以下“调用者”脚本时:

#!/usr/bin/perl

exec{"./called"}("name", "arg");

它本身调用以下“被调用”脚本:

#!/usr/bin/perl

print("$0 $ARGV[0]\n");

我得到了“./called arg”!

如果我从“来电者”调用以下“called.c”程序:

#include <stdio.h>

int main(int argc, char *argv[])
{
        printf("%s %s\n", argv[0], argv[1]);
        return 0;
}

我按预期得到“name arg”。

有没有办法获取脚本名称,而不是路径?

2 个答案:

答案 0 :(得分:0)

使用basename核心模块:

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

答案 1 :(得分:0)

经过Bash,Python甚至自定义脚本解释器的一些测试后,我发现Shebang机制不会将“argv [0]”传播给解释器,但会使用shebang之后的路径为“argv [ 0]“为翻译。我想这是C程序的一个功能,无法用脚本模拟。