hi
while traversing a filesystem i want to output a list of all files
grouped by file extensions.
this is no problem in itself but in the output i want the file names to
appear in their correct sorted or nested order (which is in the order
they entered the hash).
considering the test script below i have a for loop that can do the
order for me (but no filenames) and a while loop that can produce the
filenames (but unordered).
my end result in this specfic example should be like:
.pl
(1) -> :folder_one:byte.pl
(2) -> :folder_one:compare.pl
(5) -> :folder_one:folder_two:cool.pl
(6) -> :folder_one:folder_two:nested.pl
(7) -> :folder_one:folder_two:folder_three:hash.pl
(9) -> :folder_one:folder_two:folder_three:last.pl
.gif
(3) -> :folder_one:some.gif
(4) -> :folder_one:folder_two:pic.gif
(8) -> :folder_one:folder_two:folder_three:b_.gif
(10) -> :folder_one:folder_two:folder_three:last.gif
thanks
allan
____________________________________________________
#! perl -w
use strict;
my %hash_of_file_extensions;
$hash_of_file_extensions{".pl"}{1} = ":folder_one:byte.pl";
$hash_of_file_extensions{".pl"}{2} = ":folder_one:compare.pl";
$hash_of_file_extensions{".gif"}{3} = ":folder_one:some.gif";
$hash_of_file_extensions{".gif"}{4} = ":folder_one:folder_two:pic.gif";
$hash_of_file_extensions{".pl"}{5} = ":folder_one:folder_two:cool.pl";
$hash_of_file_extensions{".pl"}{6} = ":folder_one:folder_two:nested.pl";
$hash_of_file_extensions{".pl"}{7} = ":folder_one:folder_two:folder_three:hash.pl";
$hash_of_file_extensions{".gif"}{8} = ":folder_one:folder_two:folder_three:b_.gif";
$hash_of_file_extensions{".pl"}{9} = ":folder_one:folder_two:folder_three:last.pl";
$hash_of_file_extensions{".gif"}{10} = ":folder_one:folder_two:folder_three:last.gif";
print "this does not produce the file name\n\n";
for my $extension (keys %hash_of_file_extensions) {
print $extension . "\n\n";
for my $level (sort by_number(keys
%{$hash_of_file_extensions{$extension}})) {
print "($level) -> ?\n";
}
print "\n\n";
}
print "this produces everthing but unordered\n\n";
while ((my $extension, my $innerHash) = each %hash_of_file_extensions) {
print $extension . "\n\n";
while ((my $file_reference, my $filename) = each %$innerHash) {
print "($file_reference) -> $filename\n";
}
print "\n\n";
}
sub by_number {
$a <=> $b;
}
__END__