I recommend against using a string eval without checking
$@ and putting in an error check showing both the error
and the generated code that produced that error. Else you
could
easily have a small typo and never know it, leading to
much puzzling about why your sort worked strangely.
But luckily, even for complex sorts, you don't need eval.
Instead for each specific clause you can build a function
that takes that clause and produces a sort function from
it. If you have multiple clauses, then you can combine them
easily. Just walk through your clauses, building up an
array of comparisons you want to do, and then call something
like this:
# Takes a list of comparison subroutines for a sort, and
# returns a combined comparison subroutine.
sub combine_comp_subs {
my @subs = @_;
if (1 == @subs) {
return shift @subs;
}
else {
return sub {
foreach my $sub (@subs) {
my $c = $sub->();
return $c if $c;
}
return 0;
};
}
}
And now the main problem you have is figuring out how to
set up your data structure to compare, and how to turn the
individual conditions into individual sort subs. But you
have the same problem with an
eval solution...
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.