in reply to Arrays and Scalar Parameters

Your return statement
return @retary, $count;
is going to mash the contents of the array and the value of $count into a single list of values. When this is assigned to (@ary1, $num), all of the values will be put into @ary1.

There are two ways to accomplish what you're trying to do. First, you can pass $count before the array contents:

return $count, @retary; ... ($count, @ary1) = read_data(...);
This method still lets you return only one array.

The other method is to return a reference to @retary instead of returning the array's contents:

return \@retary, $count; ... ($ary1, $count) = read_data(...);
This allows you to return any number of arrays and scalars in any order. It's also more efficient because read_data() is returning a two-value list instead of a fifty- or hundred- or whatever-value list.

Finally, let me add that, if $count is just the number of elements in @retary, there's really no need to pass it as a separate value. The caller can derive the size of the array from the array itself:

@ary1 = read_data(...); $num = @ary1; OR $ary1 = read_data(...); $num = @$ary1;