Pourquoi devrais-je retourner une table de hachage ou d'un hachage de référence en Perl?

Quel est le moyen le plus efficace d'atteindre le ci-dessous? (Je sais qu'ils accomplissent la même chose, mais comment la plupart des gens ne présente entre les trois, et pourquoi?)

Fichier un.pl

my %hash = build_hash();
# Do stuff with hash using $hash{$key}
sub build_hash
{
    # Build some hash
    my %hash = ();
    my @k = qw(hi bi no th xc ul 8e r);
    for ( @k )
    {
        $hash{$k} = 1;
    }

    # Does this return a copy of the hash??
    return %hash;
}

Fichier b.pl

my $hashref = build_hash();
# Do stuff with hash using $hashref->{$key}
sub build_hash
{
    # Build some hash
    my %hash = ();
    my @k = qw(hi bi no th xc ul 8e r);
    for ( @k )
    {
        $hash{$k} = 1;
    }

    # Just return a reference (smaller than making a copy?)
    return \%hash;
}

Fichier c.pl

my %hash = %{build_hash()};
# Do stuff with hash using $hash{$key}
# It is better, because now we don't have to dereference our hashref each time using ->?

sub build_hash
{
    # Build some hash
    my %hash = ();
    my @k = qw(hi bi no th xc ul 8e r);
    for ( @k )
    {
        $hash{$k} = 1;
    }

    return \%hash;
}
Voir DONC, la question perl retour à partir de hachages fonctions, les meilleures pratiques (il apparaît dans la liste à droite de cette page...).
ne vous inquiétez pas sur les scalaires contexte de retour d'une fonction qui n'a pas de sens d'appeler dans un contexte scalaire
Nous couvrons une grande partie de ce Intermédiaires Perl (oreilly.com/catalog/9780596102067).

OriginalL'auteur user105033 | 2010-01-05