If you use an array of hashes, the sorting becomes quite intuitive:
#! perl -slw
use strict;
use Data::Dump qw[ pp ];
my @data;
while( <DATA> ) {
my( $col, $cnt, $stat, $miss, $mod ) = m[
^
Collection=>(\d+) \s+
ImageCount=>(\d+) \s+
Status=>(\w+ ) \s+
Missing=>( [1-9,]+ )? \s+
Modified=>( .+ )
$
]x or warn "Bad format at line $.\n" and next;
my( $day, $mon, $year, $hrs, $min, $sec ) =
$mod =~ m[(\d+)/(\d+)/(\d+) (\d+):(\d+):(\d+)]
or warn "Bad date format in line $." and next;
push @data, {
Collection => $col,
ImageCount => $cnt,
Status => $stat,
Missing => [ split ',', $miss||'' ],
Modified => sprintf( "%4d/%02d/%02d %02d:%02d:%02d",
$year, $mon, $day, $hrs, $min, $sec ),
};
}
##pp 'original order', \@data;
## Sort data by image count descending and modified date ascending
my @ordered = sort {
$data[ $b ]{ ImageCount } <=> $data[ $a ]{ ImageCount }
||
$data[ $a ]{ Modified } cmp $data[ $b ]{ Modified }
} 0 .. $#data;
print 'Sorted by Image count descending and modified date ascending';
pp $data[ $_ ] for @ordered;
__DATA__
Collection=>168245 ImageCount=>6 Status=>SI Missing=>1,3 Modified=>01/
+18/2012 11:14:30
Collection=>161745 ImageCount=>6 Status=>I Missing=>2,3 Modified=>01/1
+8/2012 11:16:38
Collection=>162451 ImageCount=>6 Status=>SC Missing=> Modified=>01/20/
+2012 11:16:38
Collection=>117481 ImageCount=>8 Status=>C Missing=> Modified=>01/18/2
+011 7:16:38
Produces:
C:\test>junk53
Sorted by Image count descending and modified date ascending
{
Collection => 117481,
ImageCount => 8,
Missing => [],
Modified => "2011/18/01 07:16:38",
Status => "C",
}
{
Collection => 168245,
ImageCount => 6,
Missing => [1, 3],
Modified => "2012/18/01 11:14:30",
Status => "SI",
}
{
Collection => 161745,
ImageCount => 6,
Missing => [2, 3],
Modified => "2012/18/01 11:16:38",
Status => "I",
}
{
Collection => 162451,
ImageCount => 6,
Missing => [],
Modified => "2012/20/01 11:16:38",
Status => "SC",
}
With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.