Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Dispatchers for dummies

by Tanktalus (Canon)
on Oct 14, 2008 at 21:24 UTC ( [id://717090]=note: print w/replies, xml ) Need Help??


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+/ +)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://717090]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (6)
As of 2024-04-18 03:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found