在这个答案中使用perl one-liner作为:
perl -we '... CORE::say "x=$x"'
Run Code Online (Sandbox Code Playgroud)
使用-e和CORE::say而不是更短的优点是什么:-E和普通的say,例如:
perl -wE '... say "x=$x"'
Run Code Online (Sandbox Code Playgroud)
ike*_*ami 10
feature.pm是为了允许向后兼容的功能添加到Perl而引入的.-E启用所有向后不兼容的功能,这意味着-E如果升级,使用的程序可能会中断perl.
perl -E'... say "foo"; ...' # Forward-incompatible (5.10+)
perl -Mfeature=say -e'... say "foo"; ...' # ok (5.10+)
perl -Mv5.10 -e'... say "foo"; ...' # ok (5.10+)
perl -M5.010 -e'... say "foo"; ...' # ok (5.10+)
perl -e'... CORE::say "foo"; ...' # ok (5.16+)
Run Code Online (Sandbox Code Playgroud)
例如,假设您在2010年编写了以下程序:
perl -E'sub fc { my $acc=1; $acc*=$_ for 2..$_[0]; $acc } say fc(5);'
Run Code Online (Sandbox Code Playgroud)
使用2010年最新的Perl(5.12),该程序输出如下:
120
Run Code Online (Sandbox Code Playgroud)
使用2016年最新的Perl(5.24),该程序输出如下:
5
Run Code Online (Sandbox Code Playgroud)
差异是由于在5.16中添加了一个功能,在启用时会改变该程序的含义.如果一个人避免使用-E,程序的行为就不会改变.具体而言,1205.24中的以下输出:
perl -e'sub fc { my $acc=1; $acc*=$_ for 2..$_[0]; $acc } CORE::say fc(5);'
Run Code Online (Sandbox Code Playgroud)