Array::Lookup(3)
Array::Lookup - Lookup strings in arrays or hash tables
with abbreviation.
SYNOPSIS
use Array::Lookup;
$value = lookup $key, \@keywords, \¬found, \&toomany;
$value = lookup $key, \%keywords, \¬found, \&toomany;
lookup_error $key, $keywords, $err, $msg;
DESCRIPTION
lookup
Lookup $key in the table @keywords and return the
unambiguously matching keyword, if any. If the second
argument is given as a hash array, %keywords, then lookup
a matching key, with abbreviation, and return the value
corresponding to the unambiguously matching key.
If there are no matches, invoke ¬found like this:
&$notfound( $key, \@keywords, '');
If there are two or more matches, invoke &toomany like
this:
&$toomany( $key, \@keywords, \@matches);
If either subroutine is omitted or null, then no special
action is taken except that undef is returned for the
failed lookup.
Note that the third argument, the array of ambiguous
matches, allows a common subroutine to be used for both
error conditions and still distinguish the error.
See the section on lookup_error for a standard method of
handling lookup failures.
lookup_error
Handle an error for the lookup subroutine. The arguments:
$key The search key which failed the lookup.
$keywords The hash or array reference containing the
keywords none of which matched the $key.
$err A flag indicating if the lookup failed because
$msg A format string used to format and print the
error message. It should contain two printf
substitution sequences: %s. The first will be
substituted with the failed lookup key; the
second with one of the phrases: "not found" or
"is ambiguous", depending upon $err.
If $msg is omitted or null, a default message
will be used:
"lookup failed: %s %s; use one of:\n"
followed by a listing of the strings in the
$keywords array.
EXAMPLES
Using arrays
use Array::Lookup;
...
@keywords = qw(quit find get set show);
...
$command = <STDIN>;
$command = lookup $command, \@keywords,
sub { lookup_error @_, "Unknown command '%s'; use one of:\n"; },
sub { lookup_error @_, "Command '%s' %s; use one of:\n"; };
Using hashes
use Array::Lookup;
...
%Commands = ( 'quit' => \&quit, 'get' => \&get, 'set' => \&set,
'find' => \&find, 'show' => \&show );
...
$input = <STDIN>;
$command_sub = lookup $input, \%Commands,
sub { lookup_error @_, "Unknown command '%s'; use one of:\n"; },
sub { lookup_error @_, "Command '%s' %s; use one of:\n"; };
SEE ALSO
the Array::PrintCols manpage
AUTHOR
Alan K. Stebbens <aks@sgi.com>