Каков наиболее эффективный способ выполнения ниже? (Я знаю, что они выполняют одно и то же, но как большинство людей сделают это между тремя и почему?)
Файл a.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;
}
Файл 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;
}
Файл 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;
}