2014-09-15 8 views
-2

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

хэша выглядеть

'a1' => '1', 

'a2' => '2'. 

'Def' => [ 
      'd' => 'x', 
      'e' => 'y' 
     ] 

Мне нужно сделать отдельный хэш для «Def». и напечатайте только «Def» в виде массива

+0

я разочарован тем, что я не в состоянии четко описать мой вопрос, я просто хочу знать, что мы можем создать новый хэш от существующего хэша, которые включают некоторую часть от этого хеша, – user3887070

+0

Вы смотрите на часто задаваемые вопросы о Perl? Существует целый набор, посвященный манипулированию структурами данных: http://perldoc.perl.org/perlfaq4.html –

+0

было бы полезно показать как ваш ввод, так и то, что вы ожидаете в выходе. Также немного выдержки из того, что вы пробовали. –

ответ

0

Ее жесткие от прочтения вашего вопроса, чтобы знать, что именно вы пытаетесь достичь, но моя интерпретация этого является то, что вы хотите, чтобы извлечь анонимный хэш выделенного Защиту и хранить его в другой хэш. Затем вы хотите напечатать этот хэш в виде массива. Я также включил примеры для печати только ключей значений хэша.

use strict; 
use Data::Dumper; 

my %first_hash = (
    a1 => '1', 
    a2 => '2', 
    def => { 
     d => 'x', 
     e => 'y' 
    } 
); 

my %second_hash = %{$first_hash{'def'}}; 
my @full_array = %second_hash; 
my @keys_array = keys %second_hash; 
my @values_array = values %second_hash; 

print Dumper (\%first_hash); 
print Dumper (\%second_hash); 
print "full array: ", join(' ',@full_array), "\n"; 
print "keys array: ", join(' ',@keys_array), "\n"; 
print "values array: ", join(' ',@values_array), "\n"; 

ВЫВОД

$VAR1 = { 
      'a2' => '2', 
      'def' => { 
        'e' => 'y', 
        'd' => 'x' 
        }, 
      'a1' => '1' 
     }; 
$VAR1 = { 
      'e' => 'y', 
      'd' => 'x' 
     }; 
full array: e y d x 
keys array: e d 
values array: y x 
0

Ниже вы найдете ответ.

print "@{$a{'Def'}}"; 
+0

это не работает, появляется ошибка Глобальный символ «% VersionRef» требует явного имени пакета в строке CombinedScript.pl 307. BEGIN небезопасно после ошибок - компиляция прерывается на линии CombinedScript.pl 444 – user3887070

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