The Schwartzian Transform is indeed most appropriate in this case. However your sort code is a little buggy. OP may have better luck with:
print join "\n", map {"$_->[0]"} sort {$a->[1] <=> $b->[1]} map {[$_, +-M]} @DirList;
Note that the replies to What is "Schwarzian Transform" (aka Schwartzian) contain many useful comments and references pertaining to the Schwartzian Transform too.
In reply to Re^3: sorting a directories content
by GrandFather
in thread sorting a directories content
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |