'create hash of entire group' looks like it has a bit too complicated logic in the ifs in the innermost loop but the indentation is broken and I don't know the format your data is in, so it's hard to give advise there.
Don't put the finished people into an array. Instead directly manipulate the hash. Just set the corresponding value to undef - instead of the push you then have $employee{$col} = undef;
This obliviates the need for the delete loops.
Instead you just use the following to print out the list:print LIST $_, "\n" for grep defined, values %employee;i.e. print to the filehandle LIST only the defined values of the hash %employee.