Perl 中 %hash and \%hash 作为参数的区别
说明
When you pass
%hash
, Perl passes a possibly large number of elements to the called function, which correspond to the key/value pairs.
When you pass\%hash
, Perl passes a reference to a hash - essentially the address of the hash.
当你传递
%hash
时,Perl 会向被调用的函数传递大量元素,这些元素对应于键/值对。
当你传递\%hash
时,Perl传递对哈希的引用 - 本质上是哈希的地址
my %hash = ( Key1 => "Value1", Key2 => "Value2" );
sub counter
{
printf "Count: %d\n", scalar(@_);
}
counter(%hash);
counter(\%hash);
结果:
Count: 4
Count: 1
There are multiple ways you can get at the data:
sub hashref
{
my($ref) = @_;
foreach my $key (keys %{$ref})
{
print "$key: $ref->{$key}\n";
}
}
sub hashnonref
{
my(%hash) = @_;
foreach my $key (keys %hash)
{
print "$key: $hash{$key}\n";
}
}
sub hashasarray
{
my(@array) = @_;
foreach my $value (@array)
{
print "Value: $value\n";
}
}
hashref(\%hash); # Same data as before
print "\n";
hashnonref(%hash);
hashasarray(%hash);
结果:
Key2: Value2
Key1: Value1
Key1: Value1
Key2: Value2
Value: Key2
Value: Value2
Value: Key1
Value: Value1
参考
https://perldoc.perl.org/perlreftut
https://perldoc.perl.org/perlref