++ 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.
|