(...... perl新手)
我有一个哈希设置如下所示。我希望它存储额外的值,但它失败而不会抛出任何错误。
execute(\%values);
sub execute()
{
my ($values) = @_;
my $areacode = "982222";
my $name = "john";
$values->{"area"}{$areacode}{person}{$name}= 1;
my $hashid = "123456";
$values->{"area"}{$areacode}{person}{$name}{id}= $hashid;
}
在此之后,如果我
print $values->{"area"}{$areacode}{person}{$name}{id};
我没有看到任何内容,脚本失败了。 如何使哈希存储这个额外的值?
我何时将""
用于区域等字段?
答案 0 :(得分:2)
在
中$values->{area}{$areacode}{person}{$name} = 1;
您已分配到...{$name}
号码1
。在下一步中,
$values->{"area"}{$areacode}{person}{$name}{id}= $hashid;
#-----------------------------------^^^^^^^ <--hashref
希望将此号码1
用作hashref
- 这是错误的。
使用:
use strict;
use warnings;
您也可以使用Data::Dumper
转储数据结构,如下所示:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my %hash;
execute(\%hash);
print Dumper \%hash;
sub execute {
my ($values) = @_;
my $areacode = "982222";
my $name = "john";
$values->{area}{$areacode}{person}{$name}{num} = 1;
# ----------------------------------------^^^ some key
my $hashid = "123456";
$values->{area}{$areacode}{person}{$name}{id} = $hashid;
#adding another
$values->{area}{$areacode}{person}{joe}{num} = 2;
$values->{area}{$areacode}{person}{joe}{id} = $hashid;
$values->{area}{'0000000'}{person}{susan}{num} = 1;
$values->{area}{'0000000'}{person}{susan}{id} = 10000;
}
请注意引用的0000000
- 如果没有引号,则会将其解释为数字0
。
打印:
$VAR1 = {
'area' => {
'0000000' => {
'person' => {
'susan' => {
'id' => 10000,
'num' => 1
}
}
},
'982222' => {
'person' => {
'joe' => {
'id' => '123456',
'num' => 2
},
'john' => {
'id' => '123456',
'num' => 1
}
}
}
}
};
答案 1 :(得分:0)
当你说:
$values->{"area"}{$areacode}{person}{$name}= 1;
my $hashid = "123456";
$values->{"area"}{$areacode}{person}{$name}{id}= $hashid;
你试图让$values->{"area"}{$areacode}{person}{$name}
同时包含数字和哈希引用作为值;你不能这样做。