Why
map in void context?
mkdir $DIR{$_} for sort { length $DIR{$a} <=> length $DIR{$b} } keys %DIR;
But you're not using the hash keys for anything other than accessing the hash elements.
mkdir $_ for sort { length $a <=> length $b } values %DIR;
That could be done with a Schwartzian transform.
mkdir $_->[0] for sort { $a->[1] <=> $b->[1] } map [ $_, length $_ ], values %DIR;
Finally, though I may be wrong, it appears to me due to your peculiar definition of order that what you really want to do is
mkdir $_ for sort { $a =~ tr[/][] <=> $b =~ tr[/][] } values %DIR;
Or with a Schwarzian transform:
mkdir $_->[0] for sort { $a->[1] <=> $b->[1] } map [ $_, tr[/][] ], values %DIR;
Update: good point;
MrNobo1024++
Makeshifts last the longest.