2014-02-27 3 views
0

Я пытаюсь узнать сложную структуру данных в Perl, для этого II написал код, но я не получаю никакого вывода:Как напечатать хэш хэш в котором один хэш ссылка на другой

#!/usr/bin/perl 
use strict; 
use warnings; 

my %abc=(Education => "BE",Marital_Status => "Single", Age => "28", Working_Exp => "4yrs"); 
my %cde=(Education => "BE",Marital_Status => "Single", Age => "29", Working_Exp => "5yrs"); 


my %info =(info_one => "\%abc", info_two => "\%cde"); 

foreach my $val (keys %info) 
{ 
    foreach my $check (keys %{$info{val}}) 
    { 
    print ${$info{val}}{check}."\n"; 
    } 
} 
+0

Используйте анонимные хэши, которые помогут вам хранить и управлять данными. –

+0

@NaghaveerRGowda: вы имеете в виду использование [hashrefs] (http://stackoverflow.com/questions/1817394/whats-the-difference-between-a-hash-and-hash-reference-in-perl) "и вы хотите быть более точным, чем сказать «поможет вам хранить и управлять данными» :) –

+1

@DanDascalescu: yes Его «hashrefs» и спасибо Dan :) –

ответ

5

Для изучения сложных структур данных в Perl нет лучшей ссылки, чем Perl Data Structures Cookbook.

присвоений info_one и info_two are строк, так что вы хотите, чтобы удалить двойные кавычки из вокруг \%abc и \%cde. Кроме того, вам нужно добавить скалярный знак $ в val и check в последней строке print, потому что это переменные.

#!/usr/bin/perl 
use strict; 
use warnings; 

my %abc= (
    Education => "BE", 
    Marital_Status => "Single", 
    Age => "28", 
    Working_Exp => "4yrs" 
); 
my %cde= (
    Education => "BE", 
    Marital_Status => "Single", 
    Age => "29", 
    Working_Exp => "5yrs" 
); 


my %info = (
    info_one => \%abc, 
    info_two => \%cde 
); 

foreach my $val (keys %info) { 
    foreach my $check (keys %{$info{$val}}) { 
     print ${$info{$val}}{$check}."\n"; 
    } 
} 

Последняя строка немного некрасиво, но, как вы читаете через структуру данных Cookbook, вы научитесь использовать оператор -> и написать заявление более элегантно.

Смежные вопросы