In case the subject isn't entirely clear, what I'm trying to achieve is a sort of an array of hashes by a field which contains the following three keywords -- Local, State, National. The trick is that I need to sort the records in that order. Thus a straight-forward alpha sort will not work.
I checked the Q&A, searched PM and Google and checked my various Perl books to no avail. I have a solution but am hoping a more clever monk could make it more efficient.
#!/usr/bin/perl
use strict;
use Data::Dumper;
my @advocates = (
{
fld_title => 'Rec1',
fld_type => 'National',
},
{
fld_title => 'Rec2',
fld_type => 'State',
},
{
fld_title => 'Rec3',
fld_type => 'Local',
},
);
sub by_locale {
my $a_type;
my $b_type;
$a_type = 1 if ($a->{'fld_type'} =~ /local/i);
$a_type = 2 if ($a->{'fld_type'} =~ /state/i);
$a_type = 3 if ($a->{'fld_type'} =~ /national/i);
$b_type = 1 if ($b->{'fld_type'} =~ /local/i);
$b_type = 2 if ($b->{'fld_type'} =~ /state/i);
$b_type = 3 if ($b->{'fld_type'} =~ /national/i);
$a_type <=> $b_type;
}
my @sorted_advocates = sort by_locale @advocates;
warn Dumper("unsorted_advocates", \@advocates);
warn Dumper("sorted_advocates", \@sorted_advocates);
Thanks for any pointers,
-Wm
-
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.