如何获取正在运行的Perl脚本的路径和名称(C中的argv [0])

时间:2010-07-06 05:48:44

标签: perl command-line-arguments

在C / C ++中(bash也是?)第一个命令行参数argv [0]是二进制文件名(以用户调用的绝对路径或相对路径为前缀)。

在Perl中,第一个命令行参数$ ARGV [0]是脚本的路径和名称之后的第一个命令行参数。

Perl脚本如何获取用于调用它的路径和名称?

谢谢!

2 个答案:

答案 0 :(得分:7)

$0包含包含正在执行的perl脚本的文件的名称。

答案 1 :(得分:6)

  

“在C / C ++中(bash也是?)第一个命令行参数argv [0]是二进制文件名”

顺便说一句,

是完全错误的。 ISO标准不要求这样做。

来自C99:

  

如果argc的值大于零,则argv [0]指向的字符串表示程序名称;如果程序名不能从主机环境获得,则argv [0] [0]应为空字符。

请注意,它表示“代表程序名称”,而不是“是二进制可执行文件的位置”。那是因为有一个早期的片段说明:

  

...数组成员argv [0]到argv [argc-1]包含指向字符串的指针,在程序启动之前由主机环境给出实现定义的值。“

对于你的argv[0]来说,命令“sleep 60”是“pax的梦幻睡眠效用”而不是“/ bin / sleep”是完全合法的。

简而言之,环境不必提供程序的表示,即使它确实如此,也不必是可用于查找二进制文件的任何内容。


但是,为了使我的dia骂感到无聊,Perl为此提供了$0$PROGRAM_NAME(以那种可怕的“英语”模式)。有关详细信息,请参阅perlvar