use strict; sub foo { print "got: ", join(', ', map { ref($_) ? "[@$_]" : $_ } @_),"\n"; } my @alpha = qw( a b c ); my @nums = qw( 1 2 3 ); # flattened array foo(@alpha); # 2 flattened arrays foo(@alpha, @nums); # array ref and flattened array foo(\@alpha, @nums); # flattened array and 2 array refs foo(@nums, \@alpha, [qw/d e f/]); # flattened array, an array ref and a list foo(@nums, [ qw/4 5 6/ ], qw/7 8 9/); __output__ got: a, b, c got: a, b, c, 1, 2, 3 got: [a b c], 1, 2, 3 got: 1, 2, 3, [a b c], [d e f] got: 1, 2, 3, [4 5 6], 7, 8, 9