2014-10-01 44 views
2

哈希(...新到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}; 

我沒有看到任何東西,腳本失敗。 如何使散列存儲這個額外的價值?

什麼時候使用""作爲區域?

+0

所有變量都使用'$'作爲前綴。你有'person'和'name'沒有'$'前綴。他們是文字還是變數? – 2014-10-01 00:24:50

+0

這是一個錯字。我已經修好了。請刷新。 – user3606175 2014-10-01 00:26:02

+0

人是字面的。是否應該包含在引號中。不過,我在代碼中看不到它的用法。只有地區在引號中。 – user3606175 2014-10-01 00:27:08

回答

2

$values->{area}{$areacode}{person}{$name} = 1; 

分配給...{$name}1。在接下來的步驟,

$values->{"area"}{$areacode}{person}{$name}{id}= $hashid; 
#-----------------------------------^^^^^^^ <--hashref 

想用這個號碼1作爲hashref - 什麼是ofcourse錯誤。

用途:

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 
                  } 
               } 
            } 
        } 
     }; 
+0

謝謝。這現在是有道理的。但是,如何將此額外值添加到此散列中?我需要一個新的散列來存儲這個嗎? – user3606175 2014-10-01 00:48:16

+0

謝謝。我需要爲{name}設置{id},所以我最終處理了數據結構以存儲這些細節。所以,我沒有使用這個解決方案,但是這幫助我走上正軌。非常感謝 – user3606175 2014-10-01 03:21:57

0

當你說:

$values->{"area"}{$areacode}{person}{$name}= 1; 

my $hashid = "123456"; 
$values->{"area"}{$areacode}{person}{$name}{id}= $hashid; 

你正試圖使$values->{"area"}{$areacode}{person}{$name}同時擁有數量和哈希作爲參考值;你不能那樣做。

+0

謝謝。說得通。那我該如何解決呢?使用新的數據結構? – user3606175 2014-10-01 00:51:06

+0

取決於*爲什麼*您希望key $ name的值爲1和散列值。 – ysth 2014-10-01 01:07:22