我目前正在尝试学习Perl,并且我注意到有时人们在将它们作为参数传递时"逃避"变量.我首先注意到这使用SQL :: Abstract:
my %hash = (
'foo' => 'bar'
);
$db->insert('table', \%hash);
现在,在Perl中搜索"print_r"(PHP)等价物并看到人们推荐Data :: Dumper,我无法理解为什么人们会认为它们是等效的,直到我看到一个使用print Dumper(\%hash);
而不是使用的示例print Dumper(%hash);
.
这个:
my %hash = (
key1 => 'value1',
key2 => 'value2'
);
print Dumper(%hash);
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = 'key2';
$VAR2 = 'value2';
$VAR3 = 'key1';
$VAR4 = 'value1';
Run Code Online (Sandbox Code Playgroud)
但print Dumper(\%hash);
输出这个:
Run Code Online (Sandbox Code Playgroud)
$VAR1 = {
'key2' => 'value2',
'key1' => 'value1'
};
有人可以解释这是什么以及发生了什么?我在我的Perl书上找不到这个,甚至不知道在Google上搜索什么.谢谢.
Jon*_*ler 17
借用以太的评论 - 参见Perl References Tutorial,以及后来的语言规范中的Perl References Manual.或者在命令行使用perldoc perlreftut
和perldoc perlref
.
传递时%hash
,Perl会将大量元素传递给被调用函数,这些元素对应于键/值对.
传递时\%hash
,Perl传递对哈希的引用 - 实质上是哈希的地址.
例如:
my %hash = ( Key1 => "Value1", Key2 => "Value2" );
sub counter
{
printf "Count: %d\n", scalar(@_);
}
counter(%hash);
counter(\%hash);
Run Code Online (Sandbox Code Playgroud)
产生:
Count: 4
Count: 1
Run Code Online (Sandbox Code Playgroud)
您可以通过多种方式获取数据:
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);
Run Code Online (Sandbox Code Playgroud)
额外输出:
Key2: Value2
Key1: Value1
Key1: Value1
Key2: Value2
Value: Key2
Value: Value2
Value: Key1
Value: Value1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2126 次 |
最近记录: |