【问题标题】:Why doesn't this Perl one-liner work on Windows?为什么这个 Perl 单行代码不能在 Windows 上运行?
【发布时间】:2018-03-10 14:16:41
【问题描述】:

尝试在命令窗口中运行一个简单的 Perl 脚本,但出现错误:

-e 第 1 行 EOF 之前任意位置的字符串终止符“'”

代码

perl -e 'print "Hello World";'

我做错了什么?

【问题讨论】:

  • 我只是复制粘贴并运行它,对我来说运行良好。
  • 如果您需要/想要在 Windows 上运行这样的单行代码,我建议安装 Cygwin:cygwin.com - 它为您提供了一个类似 unix 的环境,包括一个适当的 shell (bash) 和perl...

标签: windows perl command-line


【解决方案1】:

哪个平台?如果是 Windows 和 CMD.EXE,那么各种事情都可能出错。在类 Unix 平台上,这应该可以正常工作。最后没有换行符,因此您的提示可能会以“Hello World”开头,但仅此而已。


加上注释是Windows,那么问题就在于Windows CMD.EXE 解析命令行的方式和Unix 不一样,不能简单的用单引号括住参数;你必须使用双引号。试试:

perl -e "print qq{Hello World\n}"

它对你有用的可能性不大。

【讨论】:

    【解决方案2】:

    来自perldoc perlfaq3 - Why don't Perl one-liners work on my DOS/Mac/VMS system?

    问题通常是 这些系统上的命令解释器 有不同的想法 引用比 Unix shell 下 创造了单线。在 某些系统,您可能需要更改 单引号到双引号,其中 你不能在 Unix 或 Plan9 上做 系统。你可能还需要改变 单个%%%。例如:

    # Unix (including Mac OS X)
    perl -e 'print "Hello world\n"'
    
    # DOS, etc.
    perl -e "print \"Hello world\n\""
    
    # Mac Classic
    print "Hello world\n"
     (then Run "Myscript" or Shift-Command-R)
    
    # MPW
    perl -e 'print "Hello world\n"'
    
    # VMS
    perl -e "print ""Hello world\n"""
    

    问题是这些都不是 例子是可靠的:它们取决于 命令解释器。在 Unix 下, 前两个通常有效。在 DOS 下, 完全有可能两者都没有 作品。如果 4DOS 是命令外壳, 你可能会有更好的运气 这个:

    perl -e "print <Ctrl-x>"Hello world\n<Ctrl-x>""
    

    在 Mac 下,它 取决于你是什么环境 使用。 MacPerl shell 或 MPW 是 很像 Unix shell 的支持 对于几个引用变体,除了 它可以免费使用 Mac 的 非 ASCII 字符作为控制 字符。

    使用qq()q()qx(), 而不是“双引号”,'单 引号'和backticks,可能会使 单行更容易写。有 所有这一切都没有通用的解决方案。它 一团糟。

    【讨论】:

      【解决方案3】:

      试试:perl -e " print 'Hello..'; " 这适用于 Windows CMD.EXE 控制台,其中引用不是 POSIX 标准化的。

      【讨论】:

        猜你喜欢
        • 2010-10-14
        • 1970-01-01
        • 2023-03-03
        • 2019-03-05
        • 1970-01-01
        • 2019-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多