sub call { my $self = shift; my $env = shift; my $req = Plack::Request->new($env); # nicer than fiddling direclty with env if ($req->method eq 'POST' && $req->parameters->get('op') eq 'FOO') { # TODO check CSRF $env->{PATH_INFO} = '/some/error/page'; } return $self->app->($env); }