[Catalyst] Regex dispatch type is deprecated

John Napiorkowski jjn1056 at yahoo.com
Tue Jul 7 18:51:08 GMT 2015


You can use the Regexp Dispatcher on CPAN, for legacy code.  There is no plan to stop supporting it, unless we hit a point where we can't support it when making required fixes to Catalyst.  I just wanted to remove it from Catalyst core such as to emphasis its no longer the approved approach and prevent people from writing new code with it.

If you are using the newest Catalyst, we added Type Constraint matching to Args and this should let you dispatch on regexp types in a very similar manner.  Take a look at 

which has an example of using a regular expression type constraint generator is a way that functions similarly to how the old regexp worked.  For example:

package MyApp::Controller::User;

use Moose;
use MooseX::MethodAttributes;
use Types::Standard qw/StrMatch/;

extends 'Catalyst::Controller';

sub looks_like_a_date :Path('') Args(StrMatch[qr{\d\d-\d\d-\d\d\d\d}]) {
  my ($self, $c, $date) = @_;


requires a URL like /user/11-11-2222
That is one approach, or you can create custom ActionRoles for special dispatch rule needs.  In general I think the new feature to add type constraint checks on Args and CaptureArgs gives you everything you had with regexp and more.  Feedback, and bug fix patches welcomed!


On Tuesday, July 7, 2015 10:42 AM, Dmitry Karasik <dmitry at karasik.eu.org> wrote:

Hello all,

I'm upgrading an older Catalyst installation, and re-writing code that uses
Regex/LocalRegex dispatchers. The rewriting is mostly for routes such as
Regex('a-(\d+)-(\d+).png'), and I'm writing new code which basically does the
same, but using :Args(1), manually matching the last part of url, and detaching
to new route with matched parameters. This is not a problem, but I'm thinking
that I must be not the only one having the same problem, and there must be a
module on CPAN that dispatches execution using regexes, as a replacement. But
Catalyst::DispatchType::Regex that seems to be the offical replacement, warns about the
Regex/LocalRegex attributes are deprecated, which is confusing to me -- the
feature was removed from the core, okay, but I still want to use it through a
separate module, why then warn about deprecation again?

So basically my question is, what's the best recommended way to rewrite
requests such as a-2-3.png, for example? Or, how could I rewrite these requests
with chaining? 

Thank you,
    Dmitry Karasik

List: Catalyst at lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

More information about the Catalyst mailing list