in reply to Minimum command length matcher

jcwren, what merlyn wanted was to have you build a hash lookup for the original command, and get the actual code-ref from a double lookup.

Building an initial hash and working from that is clearly a nicer algorithm than grepping every time. However Text::Abbrev will not allow him to disambiguate the case where the match is ambiguous from simply not found. Now is that detail important? My take is that for anything meant for interactive use it is a critical distinction to make. It really matters to the UI.

OTOH the algorithmic improvement is not dependent upon the library module. Untested:

sub build_lookup { my %lookup; foreach my $str (@_) { foreach my $len (1..length($str)) { my $portion = substr($str, 0, $len); push @{$lookup{$portion}}, $str; } } return %lookup; }