http://qs321.pair.com?node_id=676455


in reply to Sorting an array of hashes

++ on '-w', of course. You could make the sorting happen more-or-less the way you were thinking about it - but it would be fragile, to say the least:

#!/usr/bin/perl -w use strict; my @AoH = ( {a => 1, b => 2, c => 3}, {a => 1, b => 2}, {a => 1, b => 2, c => 3, d => 4}, {a => 1} ); sub mysort { # Awful abuse of Perl, here... (my $A = %$a) =~ s#/.*##; (my $B = %$b) =~ s#/.*##; $B <=> $A; } my $count = 0; print join("\t", $count++, keys %$_), "\n" for sort mysort @AoH;
Here's something that's a bit cleaner - at least to my mind - and certainly more robust:
#!/usr/bin/perl -w use strict; my @AoH = ( {a => 1, b => 2, c => 3}, {a => 1, b => 2}, {a => 1, b => 2, c => 3, d => 4}, {a => 1} ); my $count = 0; print join("\t", $count++, keys(%{$AoH[$_]})), "\n" for sort { keys(%{$AoH[$b]}) <=> keys(%{$AoH[$a]}) } 0 .. $#AoH;

Update: Removed the unnecessary 'scalar' from the 'my $A = scalar %$a' in the first code example.