scalar( @reqform ) != scalar( $q->param() ) #### join( $; , sort( @reqform ) ) ne join( $; , sort( $q->param() ) ) #### while( ( $key, $value) = each %form ) { push @missing_params, $key if $value eq ''; } if( scalar @missing_params ) # ... #### #!/usr/bin/perl -w use strict; use diagnostics; $|++; use CGI; my $q = new CGI; my @reqform = qw( var1, var2, var3 ); print $q->header(); if( ( # different number of elements scalar( @reqform ) != scalar( $q->param() ) ) || ( # element names do not match join( $; , sort( @reqform ) ) ne join( $; , sort( $q->param() ) ) ) ) { # print error message for mismatched parameters print $q->start_html(), $q->p( "ERROR: mismatched parameters:" ), $q->p( "required: ", join ' ', sort @reqform ), $q->p( "passed: ", join ' ', sort $q->param() ), $q->end_html(); } # get variables from submitted form my %form = $q->Vars(); # note: this does not work with isindex tags my ( $key, $value, @missing_params ); while( ( $key, $value) = each %form ) { push @missing_params, $key if $value eq ''; } if( scalar @missing_params ) { print error message print $q->start_html(), $q->p( "ERROR: undefined parameter(s): @missing_params" ), $q->end_html(); } # carry on...