An open API service indexing awesome lists of open source software.

https://github.com/oodler577/p5-dispatch-fu

O(1)ish solution to Perl's given/when or match/case, convert familiar static hash-key based dispatch
https://github.com/oodler577/p5-dispatch-fu

perl

Last synced: over 1 year ago
JSON representation

O(1)ish solution to Perl's given/when or match/case, convert familiar static hash-key based dispatch

Awesome Lists containing this project

README

          

# p5-Dispatch-Fu

This is currently the proof of concept of an idea I had to solve
generally the given/when or so-called "smart match' problem by offering
a syntax (thanks again to Perl's prototype coercions) that semantically
allow one to deduce any set of values into a static key according to
a custom reduction operation they create; then use that key to do an O(1)
dispatch.

The solution is tiny and uses the accumlator nature of prototypes. All
complexity is offloaded to the custom implemention of the `fu` block.
Assuming the `fu` block is fast, the entire dispatch will be fast.

```
use strict;
use warnings;
use Dispatch::Fu; # exports 'fu' and 'on'

my $bar = [qw/1 2 3 4 5/];

fu {
# here, give a reference $bar of any kind,
# you compute a static string that is added
# via the 'on' keyword; result will be
# 'bucket' + some number in in 0-5

my $baz = shift;
return ( scalar @$baz > 5 )
? q{bucket5}
: sprintf qq{bucket%d}, scalar @$baz;
}
$bar,
on bucket0 => sub { print qq{bucket 0\n} },
on bucket1 => sub { print qq{bucket 1\n} },
on bucket2 => sub { print qq{bucket 2\n} },
on bucket3 => sub { print qq{bucket 3\n} },
on bucket4 => sub { print qq{bucket 4\n} },
on bucket5 => sub { print qq{bucket 5\n} };
```