views:

108

answers:

2

I have grown accustomed to the way Rails maps a route or the Django uses regex on a route (I am not expect in Django, but this is what I have heard how it does it's routing) and how they use the style of permalinks to access a particle web page. Is it possible to do the same thing in Perl?

+3  A: 

Quite possible with Catalyst, although nobody ever seems to use it, except for internationalising the internally defined dispatch paths.

singingfish
+6  A: 

I think the Perl web framework with most Rails-like routing would be Mojolicious

The creator of Mojolicious did write an excellent blog post called "Dispatchers for dummies" comparing the major Perl, Ruby & Python web frameworks and highlighting what he believed were improvements he made with routing on Mojolicious.

Unfortunately above post is no longer online :( Instead you have to settle for the Mojolicious::Guides::Routing documentation. Here is a routing example from the docs:

package MyApp;
use base 'Mojolicious';

sub startup {
    my $self = shift;

    # Router
    my $r = $self->routes;

    # Route
    $r->route('/welcome')->to(controller => 'foo', action => 'welcome');
}

1;


There are also other Perl frameworks which provide direct URL to action routing:

A more complete list of Perl web frameworks can be found on the Perl5 wiki


And if you are framework adverse then take a look at Plack (also see PSGI wikipedia). This is same as Rack on Ruby and WSGI on Python.

Here is a quick and dirty example of Plack:

use 5.012;
use warnings;

my $app = sub {
    my $env = shift;

    given ($env->{PATH_INFO}) {

        return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello Baz!' ] ]
            when '/hello/baz';

        default {
            return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello World' ]];
        }
    }
}

Then use plackup above_script.psgi and away you go.

/I3az/

draegtun
Mojolicious::Lite might be easier to get started with than full-blown Mojolicious .. http://search.cpan.org/perldoc?Mojolicious::Lite
Øyvind Skaar