我希望我的脚本可以在Windows和UNIX系统上运行,所以我想要一些代码作为自爆(只是一个示例,而不是工作)
if $^O eq 'MSWin32' {
#!/c:/perl/bin/perl.exe
}
else { / non-windows system
#!/usr/local/bin/perl
}
有没有办法在perl中执行此操作?好像#! line必须是perl脚本的第一行,所以这是不可能的?
答案 0 :(得分:4)
shebang(#!/path/to/interpreter
)仅用于类Unix系统。它必须是第一线。在Windows系统上,不使用shebang,而是可以使用文件结束关联:您可以将.pl
文件与perl解释器结束关联。
shebang中的命令行开关将由perl解释器解释,无论平台如何。
在所有平台上启动perl脚本的安全方法是实际使用perl
命令。如果成功安装Perl,它将可用。例如。 perl myscript.pl
代替./myscript.pl
。第二个选项要求在* nix系统上将文件设置为“可执行”。
答案 1 :(得分:4)
#!
必须是文件的前两个字符,因为这是内核在尝试启动文件时查找它们的位置。它们是操作系统指令(称为shebang系列)的一部分,操作系统对Perl一无所知。
如果使用标准Perl安装程序(例如ExtUtils :: MakeMaker)来安装脚本,只需使用#!perl
,安装程序将调整系统的任何现有#!
行。
答案 2 :(得分:2)
这是不可能的。 “#!”由Unix函数的exec *()系列查看,以确定如何运行该文件。所以你不能在那里做任何脚本。
无论如何它都不是那么有用,因为Windows命令提示符(或CreateProc()函数,但我不确定是否可以用它来启动批处理文件)不会查找#!。