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

Pos*_*ubb 3 perl command-line-arguments

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

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

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

谢谢!

Ber*_*ron 7

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


pax*_*blo 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.