segui il consiglio di Mich_ di curare di più la gestione dei namespace, per è sempre meglio usare:

use strict;

my $var;

sub funzione {
my $var =...
}

a parte questo quando tu scrivi:

stampa(%prova);

spalmi gli elementi dell'hash all'interno dell'array di sistema @_ nel senso che avrai:
@_ = ('ita',2,'spa',3);

per cui se poi all'interno della funzioni scrivi:

%prova = shift;

scarichi solo il primo elemento di @_ cioè 'ita'.

dovresti fare:
%prova = @_;
per avere ciò che vuoi.

Ma comunque il metodo migliore è il seguente:

#!/usr/bin/perl

use strict;

my %prova;

%prova = ('ita', 2, 'spa', 3);

sub stampa {
my $prova = shift;
print $prova->{'ita'},"\n";
}
stampa(\%prova);