34 lines
561 B
Perl
34 lines
561 B
Perl
;# Usage:
|
|
;# %foo = ();
|
|
;# &abbrev(*foo,LIST);
|
|
;# ...
|
|
;# $long = $foo{$short};
|
|
|
|
package abbrev;
|
|
|
|
sub main'abbrev {
|
|
local(*domain) = @_;
|
|
shift(@_);
|
|
@cmp = @_;
|
|
local($[) = 0;
|
|
foreach $name (@_) {
|
|
@extra = split(//,$name);
|
|
$abbrev = shift(@extra);
|
|
$len = 1;
|
|
foreach $cmp (@cmp) {
|
|
next if $cmp eq $name;
|
|
while (@extra && substr($cmp,0,$len) eq $abbrev) {
|
|
$abbrev .= shift(@extra);
|
|
++$len;
|
|
}
|
|
}
|
|
$domain{$abbrev} = $name;
|
|
while ($#extra >= 0) {
|
|
$abbrev .= shift(@extra);
|
|
$domain{$abbrev} = $name;
|
|
}
|
|
}
|
|
}
|
|
|
|
1;
|