Pase por valor vs pase por referencia para un hash de Perl

Estoy usando una subrutina para hacer algunos mapas hash diferentes. Actualmente estoy pasando el hashmap por referencia, pero esto entra en conflicto al hacerlo varias veces. ¿Debo pasar el hash por valor o pasar la referencia del hash?

use strict;
use warnings;

sub fromFile($){
    local $/;
    local our %counts =();
     my $string = <$_[0]>;
    open FILE, $string or die $!;
    my $contents = <FILE>;
    close FILE or die $!;

    my $pa = qr{
        ( \pL {2} )
        (?{
            if(exists $counts{lc($^N)}){
                $counts{lc($^N)} = $counts{lc($^N)} + 1;
            }
            else{
                $counts{lc($^N)} = '1';
            }
        })
        (*FAIL)
    }x;

     $contents =~ $pa;

    return %counts;

}

sub main(){
    my %english_map = &fromFile("english.txt");
    #my %german_map = &fromFile("german.txt");
}

main();

Cuando ejecuto los diferentes archivos txt individualmente no tengo problemas, pero con ambos me sale un poco de conflicto.

Respuestas a la pregunta(3)

Su respuesta a la pregunta