sub foo { my $array_reference = shift; print "foo: ", $array_reference->[0], "\n"; } sub bar (\@) { my $array_reference = shift; print "bar: ", $array_reference->[0], "\n"; } my @a1 = ( 1 ); my @a2 = ( \@a1 ); my $a3 = [ 3 ]; foo(@a1); foo(@a2); foo($a3); bar(@a1); bar(@a2); # bar($a3); # Can't do that because it would be a runtime error. bar(@$a3);