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