Basically, you're trying to come up with an API for a generalized switch statement without using source filters in Perl5. The actual mechanics, frankly, are irrelevant.
While I don't have much in the way of implementation suggestions, I do have a few requirements that I'd like to see from a switch statement. You may already implement some of these - I haven't checked.
Taking a page from Class::MakeMethods, it might be useful to have each case be an arrayref. The last value is the action to take. All others are the case options. If the first value begins with '--', then it's an optional modifier to how to handle the next case option. So, maybe something like:
my $switch = Switch->new(
[ '5', sub {} ], # Matches '005'
[ '--string-match', '6', sub {} ], # Doesn't match '006',
[ qr/floober/, sub {} ] # regex match
[ sub { $foo->bar( @_ ) }, sub {} ] # coderef
[ 1 .. 3, 8 .. 20, sub {} ] # Multiple cases
);
That would be a useful module.
- In general, if you think something isn't in Perl, try it out, because it usually is. :-)
- "What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against?"