[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