Regarding all options you propose: you need to handle that $a and $b is a package global if you want to have your sort routines elsewhere. IMHO, the easiest way to handle this is simply to pass them along in the function call. I.e. for option 1:

my $sorter = \&my_sorter; foreach my $key (sort { $sorter->(\%hash, $a, $b) } keys %hash) { # do something useful } sub my_sorter { my ($hashref, $a, $b) = @_; return $hashref->{$a} cmp $hashref->{$b}; }

You can do it by using caller and symbolic links, but I don't see any real benefit by that.

ihb

Read argumentation in its context!


In reply to Re^2: Sort by value - new twist by ihb
in thread Sort by value - new twist by shemp

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • 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:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.