package Text::Abbrev;require 5.000;require Exporter;=head1 NAMEabbrev - create an abbreviation table from a list=head1 SYNOPSIS    use Abbrev;    abbrev *HASH, LIST=head1 DESCRIPTIONStores all unambiguous truncations of each element of LISTas keys key in the associative array indicated by C<*hash>.The values are the original list elements.=head1 EXAMPLE    abbrev(*hash,qw("list edit send abort gripe"));=cut@ISA = qw(Exporter);@EXPORT = qw(abbrev);# Usage:#	&abbrev(*foo,LIST);#	...#	$long = $foo{$short};sub abbrev {    local(*domain) = shift;    @cmp = @_;    %domain = ();    foreach $name (@_) {	@extra = split(//,$name);	$abbrev = shift(@extra);	$len = 1;	foreach $cmp (@cmp) {	    next if $cmp eq $name;	    while (substr($cmp,0,$len) eq $abbrev) {		$abbrev .= shift(@extra);		++$len;	    }	}	$domain{$abbrev} = $name;	while (@extra) {	    $abbrev .= shift(@extra);	    $domain{$abbrev} = $name;	}    }}1;