【问题标题】:#!/usr/bin/perl is not needed to run perl in Windows, but#!/usr/bin/perl 不需要在 Windows 中运行 perl,但是
【发布时间】:2013-01-28 03:50:32
【问题描述】:

关于使用的类似问题

#! /usr/bin/perl

已回答。但我想我有一个稍微不同的问题,尽管考虑到我对计算缺乏了解,可能仍然与知情人士相似。

我的 Windows 上没有 UNIX,因此无法直接测试以下内容,但是虽然在 Windows 下运行 Perl 确实不需要 shebang 行,但在 hello.pl 中使用 shebang 行,我仍然可以如果我从

移动,则不要运行该文件
c:\Users\XYZ\Desktop\BegPerl

c:\Users\XYZ\Desktop

我的脚本存储在

c:\Users\XYZ\Desktop\BegPerl

我的 perl 文件夹存放在

c:\Strawberry\perl\bin\perl.exe

所以我的问题是:

  1. Windows 如何找到“perl.exe”?
  2. 为什么 Windows 只能在我在 c:\Users\XYZ\Desktop\BegPerl 下键入 perl hello.pl 而在 c:\Users\XYZ\Desktop 下即使包含 shebang 行时才能找到 hello.pl?

关于shebang线的“目的”我得到的答案是

为类 UNIX 系统定位脚本的可执行文件

所以,我想我的两个问题的答案可能与类 UNIX 系统和 Windows 之间的区别有关。

【问题讨论】:

  • 查找 windows PATH 和这个 stackoverflow 以进行设置 stackoverflow.com/questions/667471/…
  • 在 Windows 上,Perl 将检查 shebang 行中的命令行开关(例如,#!C:/Strawberry/perl/bin/perl.exe -T -w 中的 -T -w)。但是 OP 是正确的,Windows 不会使用 shebang 行来确定在哪里可以找到要使用的 Perl 可执行文件。

标签: windows perl


【解决方案1】:

通过将pl 文件扩展名与操作系统注册表中的perl.exe 相关联。 perl.exe所在的目录应该在系统PATH中。

这两种情况都应该在您安装 perl 时发生,但如果不是,那就是您需要做的。

【讨论】:

  • 谢谢,泡沫堆。 perl.exe(和草莓)确实在 PATH 中。我在PATHEXT中添加了pl。不过似乎没有效果(在 perl hello.pl 上)。但仍然非常感谢您提供的所有信息。我不是一个比较科学的人,但我只是想知道事情是如何工作的,所提供的答案帮助我更好地理解了 Windows 如何检索文件和执行命令。会给你投票:D
【解决方案2】:
  1. dir/perl script.pl/dir/perl script.pl

    • Unix:操作系统将在指定路径中搜索perl。不会使用 shebang 线。*
    • Win:操作系统将在指定路径中搜索perl。不会使用 shebang 线。*

  2. perl script.pl

    • Unix:操作系统将在 PATH 环境变量的路径中搜索 perl。不会使用 shebang 线。*
    • Win:操作系统将搜索 perl 相对于当前目录和 PATH 环境变量中的路径。不会使用 shebang 线。*

  3. script.pl

    • Unix:操作系统将寻找 shebang 行,并执行指定的程序和参数,然后是脚本名称和命令行参数。
    • Win:操作系统将为具有该扩展名的文件查找文件关联,并执行指定的程序和参数。 %1 将替换为文件名。 %* 将替换为命令行参数。

* — shebang 线不会被系统使用。如果没有使用,Perl 实际上会对 shebang 行进行自己的解释。这使得 -w 可以在没有使用 shebang 行的情况下生效。

【讨论】:

    猜你喜欢
    • 2012-08-03
    • 1970-01-01
    • 2015-01-03
    • 2011-11-28
    • 1970-01-01
    • 2012-10-07
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多