如何使用;说";在Perl onelines中,不声明';使用v5.11';还是类似的?

如何使用;说";在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

在较新的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...

有没有一种方法可以启用
比如说
,而无需添加斜杠(行中已经有很多斜杠)或将光标向左移动以在命令行中键入
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+