How can I sort the hash by any of those delimiters? I can sort $key, but that doesn't do the job. I need to be able to print the sorted hash by ANY bit of information.
Then a hash is probably not the data structure you want. Try an array of arrays instead. You know what is supposed to be stored in each field, right?
So the idea is that you put everything into a data structure like this (using the split function):
#!/usr/bin/perl use strict; use warnings; # an array: 0=name, 1=number, 2=city, 3=state, 4=zip my @customers = ( [ 'nye, bill','39','Somehere in Cali','Colombia','12345' ], [ 'simpson, homer','36','Springfield', 'OR', '23456' ], [ 'rubble, barney','31','Bedrock','cartoon location','33456' ] ); # set to the array field you want my $field = '0'; my @sorted = sort { $a->[$field] cmp $b->[$field] } @customers; map { print $_->[$field] . "\n" } @sorted; # OUTPUT nye, bill rubble, barney simpson, homer
Of course you can tweak this to print out what ever you want. This would be best as a subroutine to which you pass the sort field number, IMO.
--
Allolex
In reply to Re: Complex hash sorting
by allolex
in thread Complex hash sorting
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |