【发布时间】:2017-12-20 02:56:47
【问题描述】:
我将包含我已验证的代码来说明我的问题。我的目标是将此处模拟的数据库查询返回的哈希作为 %r (其中包含数字索引),并使用“名称”字段的值作为接收哈希中的键。 (此哈希将包含来自多个查询的结果。)
我觉得我很可能在引用和取消引用方面做了一些愚蠢的事情。我真的很想尝试在这里掌握工作中的概念。谢谢!
#!/usr/bin/perl -T
use strict;
use warnings;
my %hash;
my %r = (
'1' => {
name => 'Harry',
desc => 'Prince',
},
);
MergeHash(\%hash,\%r);
foreach my $name (keys %hash) {
print "name = $name, desc = $hash{$name}{desc}\n"; # EDIT: REVISED
}
exit;
sub MergeHash {
my $h = shift; # reference to receiving hash
my $r = shift; # reference to giving hash
foreach my $i (keys %{$r}) {
$$h{name} = $$r{$i}{name} || 'Unknown'; # okay
$$h{name}{desc} = $$r{$i}{desc} || 'Unknown'; # Can't use string ("Harry") as a HASH ref while "strict refs" in use at ./test.pl line 25.
}
}
编辑:根据要求,输出(在上面的代码中也表示为 cmets):
Can't use string ("Harry") as a HASH ref while "strict refs" in use at ./test.pl line 25.
编辑#2:修改打印行(在上面的代码中)以明确 %hash 中所需的结构。
【问题讨论】:
标签: perl reference dereference