# uses CGI::Application::Plugin::Forward and Authen.. etc # you must know these by now.. sub break_a_leg : Runmode { my $self = shift; $self->__check or return $self->forward('error'); # ... do whatever... } sub __check { my $self = shift; $self->authen or die('no way.'); $self->_my_sub_check_user_input() or return 0; return 1; }