assando matrizes para funções no Perl

Acho que não entendi alguns aspectos da passagem de argumentos para funções no Perl. Qual é a diferença entrefunc(\@array) efunc(@array)?

AFAIK, em ambas as funções, os argumentos são passados por referência e em ambas as funções podemos alterar os elementos de@array no programa principal. Então qual a diferença? Quando devemos usar qual?

@array = (1,2,3);
func(@array);
func(\@array);

sub func {
    ...
}

Além disso, como imitar a passagem por valor em Perl? Está usando@_ o único jeito

questionAnswers(3)

yourAnswerToTheQuestion