如何设置跨平台解释器路径?

时间:2012-09-28 07:27:17

标签: perl

我希望我的脚本可以在Windows和UNIX系统上运行,所以我想要一些代码作为自爆(只是一个示例,而不是工作)

if $^O eq 'MSWin32' {
#!/c:/perl/bin/perl.exe
}
else { / non-windows system
#!/usr/local/bin/perl
}

有没有办法在perl中执行此操作?好像#! line必须是perl脚本的第一行,所以这是不可能的?

3 个答案:

答案 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()函数,但我不确定是否可以用它来启动批处理文件)不会查找#!。