1

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

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

有没有办法在 perl 中做到这一点?看来#! line 必须是 perl 脚本的第一行,所以这是不可能的?

4

3 回答 3

4

shebang ( #!/path/to/interpreter) 仅用于类 unix 系统。它必须是第一行。在 Windows 系统上,不使用 shebang,而是可以使用文件结尾关联:您可以将.pl文件结尾与 perl 解释器相关联。

shebang 中的命令行开关将由 perl 解释器解释,与平台无关。

在所有平台上启动 perl 脚本的安全方法是实际使用该perl命令。如果 Perl 安装成功,它将可用。例如perl myscript.pl,而不是./myscript.pl. 第二个选项要求文件在 *nix 系统上设置为“可执行”。

于 2012-09-28T07:31:36.013 回答
4

#!必须是文件的前两个字符,因为这是内核在尝试启动文件时查找它们的位置。它们是操作系统指令的一部分(称为 shebang 行),而操作系统对 Perl 一无所知。

如果您使用标准的 Perl 安装程序(例如 ExtUtils::MakeMaker)来安装您的脚本,只需使用#!perl,安装程序就会为您的系统调整任何现有的#!行。

于 2012-09-28T08:02:17.357 回答
2

这是不可能的。这 ”#!” 由 exec*() 系列 Unix 函数查看,以确定如何运行文件。所以你不能在那里做任何脚本。

无论如何,它并不是那么有用,因为 Windows 命令提示符(或 CreateProc() 函数,但我不确定它是否可用于启动批处理文件)不查找 #!。

于 2012-09-28T07:30:39.780 回答