以下代码段可以正常使用:
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行的版本格式无效(非数字数据)
答案 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;