ActivePerl 5.6を使ってます

sub p
{
 print $_[0]->{text}."\n"
}

my @test = ( {'text'=> 'hoge'}, {'text' => 'fuga'} );
p($_) foreach @test; #1
p($test[0]) #2

1の場合はサブルーチンpの中のprintが $_->{text} でもいけるのに
どうして2の場合はキチンと[0]をつけてやらないといけないのでしょうか?