What problem were you trying to address when you wrote this?
Modularity, Maintenance - the usual suspects. Exporter::Dispatch isn't really aimed at dispatch tables of 3 or 4 subs of 1 line a piece - its aimed for use with large dispatch tables. For instance, the last time I used it was on a project with 4 dispatch tables, each having between 10-30 subroutines, with each subroutine varying in length from 10-60 lines.
As for closing over lexical variables, you can still do that if the subs are in a separate package - you just put the declaration in the same package as the rest of the dispatch table subs are defined!
But, as for:
And a further hash advantage - you are allowed names that would not easy or (in some cases) legal in Perl function names.
What does that buy you? The only time I think I've ever used a dispatch table that had non-word dispatch names was this:
my %op_table = (
'+' => sub { $_[0] + $_[1] },
'-' => sub { $_[0] - $_[1] },
'*' => sub { $_[0] * $_[1] },
'>' => sub { $_[0] > $_[1] },
'<' => sub { $_[0] < $_[1] },
'=' => sub { $_[0] == $_[1] }, # this is the one oddball;
# otherwise i could just eval'ed..
+.
'<=' => sub { $_[0] <= $_[1] },
'>=' => sub { $_[0] >= $_[1] },
'!=' => sub { $_[0] != $_[1] },
);
This was part of a very simple simulator that I wrote for a language that we have compiled down to 68HC11, and the only reason I wrote it this way was so I could use the raw token as the hash key.
|