在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

(…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};
我没有看到任何东西,脚本失败了。 如何使哈希存储这个额外的值

什么时候我应该使用
来处理区域?

中的字段

$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;