As
chromatic mentioned, the empty string
'', the NULL value
undef, and the empty
list () are not the same thing. If you declare
my @user2, you get an empty list, which is a valid list with zero elements. When you catenate lists, e.g.
my @main = ( @user1, @user2 );
you will have zero elements appended to the original 3, resulting in a list of 3 elements. There are no undef elements to compress. When I find one in my list, it probably means I have a defect in the code that built the list.
One thing to consider when looking for that defect is your use of delete on an array element. Doing so will create undefined elements in the list, not remove them.