Сортировка путей сложна, потому что в последовательности сортировки ASCII разделитель пути, косая черта (/) стоит перед большинством символов пути, но не перед всеми, в особенности точка и тире.
Разбейте пути на элементы пути, разделив их на косую черту. Сравнивайте элементы пути в алфавитном порядке с cmp. Если это связь, то путь с меньшим количеством элементов предшествует пути с большим количеством элементов.
Обязательно отрубите все новые строки. Используйте подпрограмму & bypath с командой Perl sort: sort bypath @files;
sub bypath {
my @a = split m'/', $a;
my @b = split m'/', $b;
for ( my $i = 0; $i<=$#a; $i++ ) {
last if $i > $#b;
return $a[$i] cmp $b[$i] if $a[$i] cmp $b[$i];
}
return $#a <=> $#b;
}
Пример результатов:
- это
- это / что
- это / что / другое
- это / что / другое / FILEA
- это / что / другое / FILEB
- это / что / other.new / FILEA