Почему сортировка не выполняется в скрипте, а не в одной строке? - PullRequest
0 голосов
/ 04 мая 2018

Следующий фрагмент отлично работает:

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 голосов
/ 04 мая 2018

В нерабочем коде есть простая опечатка. У вас есть:

@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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...