在perl中为哈希赋值
(…perl的新功能) 我有一个如下设置的散列。我希望它存储额外的值,但它失败时不会抛出任何错误在perl中为哈希赋值,perl,Perl,(…perl的新功能) 我有一个如下设置的散列。我希望它存储额外的值,但它失败时不会抛出任何错误 execute(\%values); sub execute() { my ($values) = @_; my $areacode = "982222"; my $name = "john"; $values->{"area"}{$areacode}{person}{$name}= 1; my $hashid = "123456"; $values
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};
我没有看到任何东西,脚本失败了。
如何使哈希存储这个额外的值
什么时候我应该使用”
来处理区域?中的字段
$values->{area}{$areacode}{person}{$name} = 1;
您分配给…{$name}
编号1
。下一步,
$values->{"area"}{$areacode}{person}{$name}{id}= $hashid;
#-----------------------------------^^^^^^^ <--hashref
您还可以使用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
}
}
}
}
};
当你说:
$values->{"area"}{$areacode}{person}{$name}= 1;
my $hashid = "123456";
$values->{"area"}{$areacode}{person}{$name}{id}= $hashid;
您试图使
$values->{“区域”}{$areacode}{person}{$name}
同时具有数字和哈希引用作为值;您不能这样做。所有变量都使用$
作为前缀。你有个人
和姓名
,没有$
前缀。它们是文字还是变量?那是打字错误。我已经修好了。请刷新。人物是文字。它应该包括在引号中吗。不过,在我的代码中,我并没有看到这样的用法。唯一的区域在引号中。所以。。。用引号引出来。你是从别人那里继承的吗?这个杂烩应该储存什么?通常散列是键->值对。这似乎是某种多维实现…@RyanJ:不,一个{}
之间的单词不需要引号<代码>$values->{area}{$areacode}{person}{$name}=1完全合法且惯用。谢谢。现在这是有道理的。但是,我如何将这个额外的值添加到这个散列中呢?我需要一个新的散列来储存这个吗?谢谢。我需要为{name}设置{id},因此我最终使用数据结构来存储这些细节。所以,我没有使用这个解决方案,但这帮助我走上正轨。非常感谢。有道理。那我怎么解决这个问题呢?使用新的数据结构?取决于为什么希望键$name的值同时为1和哈希。
$values->{"area"}{$areacode}{person}{$name}= 1;
my $hashid = "123456";
$values->{"area"}{$areacode}{person}{$name}{id}= $hashid;