@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
在做什么?这是什么意思?我想第一个输出是我想要的输出,但为什么不能用第二个代码得到它?
答案 0 :(得分:2)
perl的LINE: while (<>) {
… your script …
}
continue {
die "-p destination: $!\n" unless print $_;
}
标志将您的脚本循环包装:
$_
换句话说:它将每行读入$_
,运行您的脚本,然后打印print
。这是您的第一个脚本片段依赖的内容。
您的第二个脚本会自行打印一些内容,但这不会使Perl跳过自己的$_
,因此最终会打印原始值-n
。您可以使用-p
标志而不是print
来绕过此问题 - 除了没有自动{{1}}之外,其行为方式相同。