The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Tie::Hash::Rank - A hash which turns values into ranking positions

SYNOPSIS

  use Tie::Hash::Rank

  tie my %ranks, 'Tie::Hash::Rank';
  %ranks=(
    Adams   => 78,
    Davies  => 35,
    Edwards => 84,
    Thomas  => 47
  );
  print $ranks{Adams};

DESCRIPTION

This module allows you to tie a hash such that when you retrieve values from it, you get the value's rank instead of the actual data. By default, it ranks items numerically, with the highest value getting rank 1, and given two equal values they will also get the same rank.

The following named parameters are supported:

ALGORITHM

Use ALGORITHM to sort items prior to ranking them. The default is a reverse-numeric sort. Specify it thus $DATA{$a} <=> $DATA{$b} to do a normal numeric sort. Divining how to do other types of sort is left as a trivial exercise for the reader. See perldoc -f sort.

EQUALITYSUFFIX

Append EQUALITYSUFFIX to the rank of items with equal rank. The default is to have no EQUALITYSUFFIX, but a common alternative would be an = sign.

EQUALITYPREFIX

Prepend EQUALITYPREFIX to the rank of items with equal rank. The default is to have no EQUALITYPREFIX, but a common alternative would be an = sign.

RECALCULATE

Can be either onstore or onfetch, and defaults to 'onstore'. This determines when the module recalculates the ranks. 'onstore' makes it recalculate whenever you add a value to the hash, and 'onfetch' whenever you retrieve a value. Use this option if you need to tune your hash for data which is mainly read or mainly written, although it will make very little difference for small data-sets.

BUGS

Plenty, no doubt. Please tell me if you find any.

AUTHOR

David Cantrell <david@cantrell.org.uk>

This module originated as a grotesquely over-engineered answer to a trivial question posed by Simon Cozens as an example of something you might want to ask when testing someone's perl skillz. An earlier - and less complete - version of this module was posted on the London Perl Mongers mailing list.

COPYRIGHT

Copyright 2001 David Cantrell.

This module is licensed under the same terms as perl itself.

SEE ALSO

Tie::Hash(3)