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.
in reply to any built in function to take out null arrays elements?
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.
my @main = ( @user1, @user2 );
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.