Hm you're right, I had not realized it'd be for *every* route. Indeed we need more benchmark here :) But I like the attribute style. If it can help in decision making, catalyst makes use of them as well, and it's rather elegant.
Attribute style might be visually nice, but the implementation of attributes in Perl is really ugly hackery and many people (myself included) who have gotten into the weeds have concluded that it's just not worth the trouble. Personally, I would find the style below just as appealing if not more because it's guaranteed to follow Perl's grammar: get '/beer' => requires_role BeerDrinker => sub { ... }; get '/user/:user_id' => requires_role qw/Admin TeamLeader/ => sub { ... }; Plus, I can do this: my @power_users = qw/Admin TeamLeader/; get '/user/:user_id' => requires_role @power_users => sub { ... }; You can't as easily do that with attributes because attribute parameters are strings that have to be parsed -- typically split on whitespace. You *could* parse looking for "@\w+" and then eval() it, but (a) that's gross and (b) you've got timing issues because the attribute is processed at compile time and the array isn't populated until runtime. And consider if you want to put your role names in a config file instead of the source code. How do you do that with attributes? Have I convinced the doubters by now? :-) David -- David Golden <xdg@xdg.me> Take back your inbox! → http://www.bunchmail.com/ Twitter/IRC: @xdg