%sample = { 'short' =>{name=>"Job ID", width=>40, cgi=>{method=>'textfield',field=>'short',size=>15,max=>10}, div=>"center"}, 'name' =>{name=>"Job Name", width=>150, cgi=>{method=>'textfield',field=>'name',size=>35}} }; foreach (keys %sample) { $method = $sample{$_}{'cgi'}{'method'}; # if method doesn't exist, you get undef sub error in CGI pm if ($method) { print $q->$method(-name=>$job{$_}{'cgi'}{'field'}, -default=>$job{$_}{'cgi'}{'default'}, -size=>$job{$_}{'cgi'}{'size'}, -maxlength=>$job{$_}{'cgi'}{'max'} ); } print "\n"; }