如何在不声明'使用v5.11'或类似的情况下在Perl onelines中使用“say”?

时间:2014-07-02 23:40:11

标签: perl

在较新的Perls中,有“say”命令,其行为类似于println:

$ perl -e 'use v5.11; say "qqq"'
qqq

但是在oneliner中使用它有点麻烦,因为需要声明版本......

$ perl -e 'say "qqq"'
String found where operator expected at -e line 1, near "say "qqq""

$ perl -e 'print "qqq\n"'
qqq # but \n is easy for forget and "print" is longer...

有没有办法在不添加斜杠的情况下启用say(行中已经有很多)或者在命令行中将光标移动到use v5.11类型?

3 个答案:

答案 0 :(得分:15)

如果从命令行调用perl,则可以使用-E标志

  • -E program:与-e类似,但支持所有可选功能

正如所示:

$ perl -E 'say "qqq"'
qqq

答案 1 :(得分:7)

作为-E的一个选项,我使用了-l,这使得printsay一样工作(添加换行符)。我自己大部分时间都在使用它,我发现它完全取代了say

$ perl -lwe'print "foo"'
foo

它真正做的是将$\设置为$/的当前值,这会导致命令行选项-0影响-l的奇怪之处,这是密切注意,提防,小心。交换顺序很重要,所以

$ perl -l -00 -e'print "hi"'

按预期工作,但

$ perl -00 -l -e'print "hi"'

对于段落模式,它不会($\设置为"\n\n"。)

后一种情况在使用段落模式时很实用,可以轻松地重新打印段落。总而言之,使用-l有很多好处。

从技术上讲,printsay长,但我的手指已自动键入print,而print的实际情况比print^H^H^H^H^Hsay短。 。(退格)

答案 2 :(得分:2)

perl -E'say "foo";'                   # 5.10+ (Forward-incompatible!)
perl -Mfeature=say -e'say "foo";'     # 5.10+
perl -M5.010 -e'say "foo";'           # 5.10+
perl -e'CORE::say "foo";'             # 5.16+

请参阅here了解-E如何导致问题。