如何使用;说";在Perl onelines中,不声明';使用v5.11';还是类似的?
在较新的Perls中,有一个“say”命令,其行为类似于println:如何使用;说";在Perl onelines中,不声明';使用v5.11';还是类似的?,perl,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 forge
$ 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...
有没有一种方法可以启用
比如说,而无需添加斜杠(行中已经有很多斜杠)或将光标向左移动以在命令行中键入use v5.11
?如果从命令行调用perl,可以使用-E
标志
-E程序
:与-E
类似,但启用所有可选功能
如图所示:
$ perl -E 'say "qqq"'
qqq
作为-E
的一个选项,我使用-l
,这使得打印
的工作方式类似于比如说
(添加换行符)。我自己大部分时间都在使用它,我发现它完全取代了比如说
$ 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
短。。(即退格)
请参阅以了解-E
如何导致问题。谢谢。我在perldoc perlrun
中查找了单词“version”,但是-E
不在附近……我经常使用perl-dwe 0
来获得交互式perl命令行界面。但是perl-dwE 0
没有启用say
命令。我也总是在我的一行程序中使用-l
,主要是因为古老的perl
(5.8.8)在工作中不支持-E
选项。还有一个原因:awk
与perl
非常相似,因此,我们awk
程序员习惯于打印(f)
,如果没有实际需要,就不会真正热衷于为文本输出记住另一条语句:)特别是say
处于危险之中,有人建议对其进行突破性的更改,或者更确切地说,-E
通常不是扔掉OneLiner之外的最佳主意?后者,如链接页面中所述-E
会导致启用向后不兼容的更改,因此如果今天运行的程序使用-E
,明天可能会停止运行。
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+