Hello Dancers, I have another dancer-newbie question: Is there a recommended way to verify input (or general variables) and report errors to the user ? Common scenario: I have a form with 3 inputs, and they need to by in a certain format (verifiable by a simple regex). If the inputs do not conform, I want to: 1. Log the error for later inspection 2. Inform the user (e.g. using Plugin::Dancer::FlashMessage) (The error message reported to the user is not necessarily the same one written to the log, if I wish to include more technical details in the log, or be more descriptive and verbose to the user). 3. Stop processing the request. And I wish to do it in the most 'fun' dancer kind of way. Looking at a naive implementation (below), there's alot of redundant code for validating and reporting the error back to the user (and more validation code than actual processing code). Any suggestions ? Thanks! -gordon ==================== post '/dosomething' => sub { my $email = params->{email}; my $gene = params->{gene}; my $cutoff = param->{cutoff}; if (!defined $email) { warning "Missing email address"; flash error => 'Missing email address'; return template 'form_errors' ; } elsif (!valid_email($email)) { warning "Got Invalid email address: $email"; flash error => 'Invalid email address"; return template 'form_errors' ; } if (!defined $gene) { warning "Missing gene identifier"; flash error => 'Missing gene identifier'; return template 'form_errors' ; } elsif (!valid_gene_identifier($gene)) { warning "Got Invalid gene identifier: $gene"; flash error => 'Invalid gene identifier"; return template 'form_errors' ; } if (!defined $cutoff) { warning "Missing cutoff identifier"; flash error => 'Missing cutoff identifier'; return template 'form_errors' ; } elsif (!valid_cutoff_value($cutoff)) { warning "Got Invalid cutoff value: $cutoff"; flash error => 'Invalid Cutoff value: must a value between 0.1 and 0.55'; return template 'form_errors' ; } ## Input IS OK, do some processing and return the result my ($result, $error) = process($email, $gene, $cutoff); template 'result.tt', { email => $email, cutoff => $cutoff, gene => $gene, result => $result, error => $error, }; }