[Dancer-users] Matching a route including slashes (for directory listing)
sawyer x
xsawyerx at gmail.com
Sun Jan 30 11:05:17 CET 2011
On Sun, Jan 30, 2011 at 11:46 AM, Joel Roth <joelz at pobox.com> wrote:
> Hi all,
>
Hey Joel,
>
> get '/media/*' => sub { my $path = splat; ... }
>
> This matches '/media/foo' but I was expecting it to match
> '/media/foo/bar'.
>
You're right, it doesn't match /media/foo/bar. The reason is simple: the
syntax for routes, as defined by Sinatra, is not pure regex, and avoids
matching a slash on purpose.[1]
The idea is that you could declare a variable being there, without providing
a name, and then splat() returns it.
> '/media/([\w/]+)' doesn't seem to work, either.
>
Since the route syntax doesn't cover regexp.
> I'd welcome suggestions for either problem:
>
> 1. matching paths with several levels of hierarchy
>
If you know the level, and you want to be explicit, you can try the default
route syntax: '/media/*/*'.
However, you will most likely prefer a regular expression (which you tried
earlier), and Dancer allows that very easily since Perl considers regexes as
first class:
get qr/.../ => sub { ... };
We prefer to wrap qr() with something other than slashes, so we don't get
into a backslash fight:
get qr{ / media / (.*) }x => sub { ... };
Enjoy!
[1] As they say in Microsoft: "it's a feature, not a bug!"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.backup-manager.org/pipermail/dancer-users/attachments/20110130/e564e6c7/attachment.htm>
More information about the Dancer-users
mailing list