无法在-e中修改标量赋值中的print

The*_*Cat 1 perl

我有一些代码,我想用它来查找已排序文件中的重复项.(awk启发的)代码如下所示:

perl -wnla -e 'BEGIN {$previous = -1} $F[1] == $previous ? print $F[1] : $previous = $F[1]' ../VCF/FIN_20.vcf
Run Code Online (Sandbox Code Playgroud)

不幸的是它给了我一个错误:

Can't modify print in scalar assignment at -e line 1, at EOF
Execution of -e aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

我需要做些什么才能让它发挥作用?

PS.该文件看起来像

20  5282284 rs73594467
20  5282299 rs148317959
20  5282336 rs927106
Run Code Online (Sandbox Code Playgroud)

Tot*_*oto 6

只需在最后一条指令中添加parens:

perl -wnla -e 'BEGIN {$previous = -1} $F[1] == $previous ? print $F[1] : ($previous = $F[1])' 
#                                                                here ___^              ___^
Run Code Online (Sandbox Code Playgroud)

没有他们,就像:

($F[1] == $previous ? print $F[1] : $previous) = $F[1]
Run Code Online (Sandbox Code Playgroud)

  • 更好的是,如果$ F [1] == $ prev,他可以使用更清晰的'print $ F [1]; $ prev = $ F [1]` (3认同)