[Catalyst] Catalyst::Request path method as a setter

Bill Moseley moseley at hank.org
Mon Oct 21 14:58:24 GMT 2013

> =3Dhead2 $req->path

Returns the path, i.e. the part of the URI after $req->base, for the
> current request.

Pasted below is Catalyst::Request's path method.   Note from the final else
block that $req->path returns the request uri's path ($req->uri->path) with
the $req->base->path *removed* as the documentation says.

So, if the request URI and base URI are these:

http://localhost/myapp/path/to/action  # $req->uri

http://localhost/myapp/  # $req->base

then $req->path is:


Using the example above, and looking at what $req->path( ) does as a setter:

$req->path( $req->path );

would result in a new request URI of:


The path method doesn't document what it does as a setter, but this
behavior looks broken because it alters the request URI's path.

What do you think?

sub path {
    my ( $self, @params ) =3D @_;

    if (@params) {
    elsif ( $self->_has_path ) {
        return $self->_path;
    else {
        my $path     =3D $self->uri->path;
        my $location =3D $self->base->path;
        $path =3D~ s/^(\Q$location\E)?//;
        $path =3D~ s/^\///;

        return $path;

-- =

Bill Moseley
moseley at hank.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20131021/a5b39=

More information about the Catalyst mailing list