在较新的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
类型?
答案 0 :(得分:15)
如果从命令行调用perl,则可以使用-E
标志
-E program
:与-e
类似,但支持所有可选功能正如所示:
$ perl -E 'say "qqq"'
qqq
答案 1 :(得分:7)
作为-E
的一个选项,我使用了-l
,这使得print
像say
一样工作(添加换行符)。我自己大部分时间都在使用它,我发现它完全取代了say
。
$ perl -lwe'print "foo"'
foo
它真正做的是将$\
设置为$/
的当前值,这会导致命令行选项-0
影响-l
的奇怪之处,这是密切注意,提防,小心。交换顺序很重要,所以
$ perl -l -00 -e'print "hi"'
按预期工作,但
$ perl -00 -l -e'print "hi"'
对于段落模式,它不会($\
设置为"\n\n"
。)
后一种情况在使用段落模式时很实用,可以轻松地重新打印段落。总而言之,使用-l
有很多好处。
从技术上讲,print
比say
长,但我的手指已自动键入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
如何导致问题。