in reply to removing a hash from an array of hashes

You can approach the problem from a slightly different angle. Instead of deleting empty array references, you can collect all those that are non-empty:
my @dense = grep %$_, @successarray;