hash of hashes -> sorting

[email protected] (allan) Sun, 28 Oct 2001 13:24:35 +0100
Newsgroups perl.macperl.anyperl
Message-ID <[email protected]>
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__