in reply to Dispatchers for dummies

If you were to, say, use perl 5.10, would you be able to get rid of some of the parsing (which is likely done in perl) and use named captures with regexes?

$r->route(qr[^/(?<controller>[^/]+)/(?<action>[^/]+)/(?<quality>[^/]+) +(?:/(?<extras>.*))$])->to(...) # (ok, an x modifier with some gratuitous whitespace might be wise her +e..)
This would give named parameters (through %+ or %-, though I'd likely use %-). And nearly unlimited ability to validate URLs before we get into the real code. For example, being able to send /foo/123 to one piece of code, and /foo/abc to another (based on \d vs \D).

So, if you're given a string, you can have the : markers as above. But if you're given a Regexp reference and the current perl is 5.10, you have the opportunity for some much more interesting handling, which you almost don't even have to handle.

Replies are listed 'Best First'.
Re^2: Dispatchers for dummies
by sri (Vicar) on Oct 14, 2008 at 22:46 UTC
    I would like to support Perl 5.8, apart from the fact that raw regex looks quite ugly.
    A huge advantage of patterns like i'm using them is that you can rebuild the path very easily.

    The /foo/123 /foo/abc example is already possible since patterns get compiled to regex internally.
    $r->route('/:(number)_:(word)/foo', number => qr/\d+/, word => qr/\w+/ +)