2010-06-30 3 views
-1
use Data::Dumper; 
%hash = (
    Key => {test => [[testvalue, 10], [testvalue, 20]]}, 
    Key2 => {test => [[testvalue, 30], [testvalue, 40]]}, 
); 
my $parm = $hash{Key}{test}; 
foreach my $test_p (@{$parm}) { 
    print Dumper $test_p; 
} 

Он не отображается так, как я ожидаю.Как читать элементы хэша с помощью foreach?

+0

"Моя проблема это отображение" ?? – pascal

+3

Как вы ожидаете его отображения? –

ответ

1

Вы можете попробовать это:

my %hash = (
    Key => {test => [['testvalue', 10], ['testvalue', 20]]}, 
    Key2 => {test => [['testvalue', 30], ['testvalue', 40]]}, 
); 

my $parm = $hash{Key}{test}; 
foreach my $test_p (@{$parm}) { 
    print Dumper $test_p; 
} 

foreach my $test (keys %hash) { 
    my $test1 = $hash{$test}; 
    print Dumper $test; 
    foreach my $test2 (keys %{$test1}) { 
     print Dumper $test2; 
     my $test3 = $hash{$test}{$test2}; 
     foreach my $test_p (@{$test3}) { 
      print Dumper @{$test_p}; 
     } 
    } 
} 
2

В конце первой строки отсутствует запятая.

%hash = (
    Key => { 
     test => [ 
      [ testvalue , 10 ], 
      [ testvalue , 20 ] 
     ] 
    }, 
    Key2 => { 
     test => [ 
      [ testvalue , 30 ], 
      [ testvalue , 40 ] 
     ] 
    } 
); 

my $parm = $hash{Key}{test} ; 

foreach my $test_p (@$parm) { 
    use Data::Dumper; 
    print Dumper $test_p; 
} 
0

Может быть:

#/usr/bin/perl 

use strict; 
use warnings; 
use Data::Dumper; 

    sub main{ 
     my %hash = ( Key => { test => [[ "testvalue" , 10 ], [ "testvalue" ,20]] }, 
        Key2 => { test => [[ "testvalue" , 30 ], [ "testvalue" ,40]] } ); 

     foreach my $key (sort keys %hash){ 
     my $parm = $hash{$key}{test}; 
     print Dumper $_ foreach(@$parm);  
     } 

    } 

    main(); 

Выходы:

$VAR1 = [ 
      'testvalue', 
      10 
     ]; 
$VAR1 = [ 
      'testvalue', 
      20 
     ]; 
$VAR1 = [ 
      'testvalue', 
      30 
     ]; 
$VAR1 = [ 
      'testvalue', 
      40 
     ];