use CGI; $q = new CGI; $q->import_names('INPUT'); for(my $i=0; $i<=$#INPUT::name; $i++) { ### process each related record ### presuming each record has name, address, etc, fields ($FORM{$i}{name},$FORM{$i}{address},$FORM{$i}{etc}) = $INPUT::name[$i],$INPUT::address[$i],$INPUT::etc[$i]) if $INPUT::name[$i]; # if no name, the hash isn't populated. }