【问题标题】:How to set the cross platform interpreter path?如何设置跨平台解释器路径?
【发布时间】:2012-09-20 01:44:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: perl


    【解决方案1】:

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

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

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

    【讨论】:

    • shebang 行在 Windows 中确实有用。它可用于使用命令行选项运行您的脚本。即#!/usr/bin/perl -w 仍会在 Windows 中打开警告。然而,像这样的大多数事情都可以通过其他方式更好地完成。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-08
        • 2019-04-27
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        • 2014-07-11
        • 1970-01-01
        相关资源
        最近更新 更多