my %textvals = ( name => '', id => '', tabindex => '', size => 50, ... ); #### my %areavals = ( name => '', id => '', tabindex => '', size => 150, ... ); my %popupvals = ( name => '', id => '', mutiple => 1, ... ); #### my %name = ( name => 'name', fieldtype => 'textfield', } #### my %subject = ( name => 'email', fieldtype => 'textfield', } my %msgbody = ( name => 'msgbody', fieldtype => 'textarea', ); my %aselectlist = ( name => 'aselectlist', fieldtype => 'popup', optvals => [qw/option1 option2 option3 option4/], ); #### my $page = CGI->new(); my $tb = 0; foreach $field (@formfields) { my $vals; $vals = \%textvals if ($field->fieldtype eq 'textfield') ; #### $vals = \%areavals if ($field->fieldtype eq 'textarea') ; $vals = \%popupvals if ($field->fieldtype eq 'popup'); ... etc ... for each field type that might exist in the form. $tb++; $textvals{name} = $field->{name}; $textvals{tabindex} = $tb; $textvals(id} = $field->{name}; .... $page->textfield($vals) if ($field->fieldtype eq 'textfield') ; $page->textarea($vals) if ($field->fieldtype eq 'textarea') ; #### $page->popup_menu($vals) if ($field->fieldtype eq 'popup') ; ... etc ... for each field type that might exist in the form. }