为perl中的哈希值分配一个附加值

时间:2014-10-01 00:20:47

标签: perl

(...... 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};

我没有看到任何内容,脚本失败了。 如何使哈希存储这个额外的值?

我何时将""用于区域等字段?

2 个答案:

答案 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}同时包含数字和哈希引用作为值;你不能这样做。