为什么排序在脚本中失败但在单行中没有?

时间:2018-05-04 12:54:53

标签: perl

以下代码段可以正常使用:

cat versions.txt | perl -Mversion -le'  
   chomp( @a = <> );  
   print for sort { $left = $a; $right = $b; $left =~ s!^\D+!!; $right =~ s!^\D+!!; version->parse($left) cmp version->parse($right) } @a;  
'     

以下代码没有,但我不明白为什么。它们似乎实际上是相同的代码。

use strict;  
use warnings;  
use version;  

chomp(my @versions = <>);  
@versions = sort { version->parse($a =~ s/^\D+//r) cmp version->parse($b =~ s/^D+//r) } @versions;   
print $_."\n" for @versions;  

我明白了:

  

脚本第7行的版本格式无效(非数字数据)

1 个答案:

答案 0 :(得分:5)

在非工作代码中,有一个简单的拼写错误。你有:

@versions = sort { version->parse($a =~ s/^\D+//r) cmp version->parse($b =~ s/^D+//r) } @versions;

可能更好地格式化为:

@versions = sort { version->parse($a =~ s/^\D+//r) cmp
                   version->parse($b =~ s/^D+//r) } @versions;

分成两行,不对称(错误)很明显。 您在第二个D

之前缺少反斜杠
@versions = sort { version->parse($a =~ s/^\D+//r) cmp
                   version->parse($b =~ s/^\D+//r) } @versions;