【问题标题】:Using -e and -s switch in perl在 perl 中使用 -e 和 -s 开关
【发布时间】:2014-02-25 02:12:09
【问题描述】:

我开始学习 Perl。我试过了

perl -e 'print "The value of \$x=$x\n";'

给予:

The value of $x=

而:

perl -s -x=10 -e 'print "The value of \$x=$x\n";'

给予

No Perl script found in input

我想将-s 开关与-e 开关一起使用。为什么它不起作用?

【问题讨论】:

  • 嗨,伙计,如果您想在所问问题的范围之外获得一些更一般的编码反馈,您可以通过print 'X'x17^',50v;(96x9,x?5914' 与我联系。

标签: perl


【解决方案1】:
perl -se 'print "The value of \$x=$x\n";' -- -x=10

perlrun documentation 可以更清楚地了解这个选项,

-s 在程序名称之后但在任何文件名参数之前(或在 -- 的参数之前)对命令行上的开关启用基本开关解析。在那里找到的任何开关都会从@ARGV 中删除,并在 Perl 程序中设置相应的变量。如果使用 -xyz 开关调用以下程序,则打印“1”,如果使用 -xyz=abc 调用,则打印“abc”。

【讨论】:

    【解决方案2】:

    脚本本身的参数应该出现在脚本之后,无论它是单行还是文件。虽然并非总是必要的,但您可以使用 -- 将 perl 的参数与脚本的参数分开:

    $ perl -s -E'say "\$x=$x"' -- -x=42
    x=42
    

    -- 结束perl 的参数是必要的,因为-x 是perl 本身可以理解的标志,因此您的脚本永远不会看到它。来自perldoc perlrun

    -x

    -x目录

    告诉 Perl 程序嵌入在更大的不相关文本中,例如在邮件消息中。前导垃圾将被丢弃,直到第一行以“#!”开头并包含字符串“perl”。将应用该行上任何有意义的开关。

    […]

    如果指定了目录名,Perl 将在运行程序之前切换到该目录。 -x 开关只控制前导垃圾的处理。如果有尾随垃圾需要忽略,程序必须以“END”终止;如果需要,程序可以通过“DATA”文件句柄处理任何或所有尾随垃圾。

    目录(如果指定)必须紧跟在 -x 之后,中间没有空格。

    由于指定的输入print "The value of \$x=$x\n"; 不包含shebang,因此未找到实际脚本,因此发出了您遇到的错误。

    除了最简单的单行代码外,不要使用-s 开关解析。请改用Getopt::Long

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多