perl这两个脚本有什么区别

时间:2017-04-02 23:40:39

标签: perl

@products = Product.where(
'$text' => {'$search' => @search_string}).fields(:score => {'$meta' => "textScore"})

echo ab cd ef | perl -pe 'if($.==1){@L=split;foreach(@L) {$_="SING.$_";}$_="@L\n"}' SING.ab SING.cd SING.ef echo ab cd ef | perl -pe 'if($.==1){@L=split;foreach(@L) {$_="SING.$_";}print"@L\n"}' SING.ab SING.cd SING.ef ab cd ef 在做什么?这是什么意思?我想第一个输出是我想要的输出,但为什么不能用第二个代码得到它?

1 个答案:

答案 0 :(得分:2)

perl的LINE: while (<>) { … your script … } continue { die "-p destination: $!\n" unless print $_; } 标志将您的脚本循环包装:

$_

换句话说:它将每行读入$_,运行您的脚本,然后打印print。这是您的第一个脚本片段依赖的内容。

您的第二个脚本会自行打印一些内容,但这不会使Perl跳过自己的$_,因此最终会打印原始值-n。您可以使用-p标志而不是print来绕过此问题 - 除了没有自动{{1}}之外,其行为方式相同。