Вывод значения массива из хэша в perl
Я новичок в Perl, и это сводит меня с ума. У меня есть хеш, как показано ниже
%temp = (
a_collection => [\%first, \%second]
)
Я хочу получить элементы массива в виде строки, чтобы я мог использовать их в качестве аргументов в цикле. У меня есть код ниже
foreach $item (@{$temp{'a_collection'}})
{
<convert to json> $item #convert each of the above hash to a json blob
<write to file> $file #write first blob to file "first.json" and so on
}
Я получил преобразование в JSON часть. Я могу распечатать это на стандартный вывод. Теперь я хочу записать это в файл. Здесь файл $ должен иметь имена "first" и "second". Таким образом, цикл создаст два файла с именами хеш-переменных, которые есть в вышеуказанном хеш-коде. Я хочу, чтобы имена файлов совпадали, чтобы я мог отслеживать, что создается.
Редактировать: основная предпосылка проста. Что бы я ни делал, будь то кодировка JSON и т. Д., Я хочу, чтобы имена хеш-переменных были в виде строки. Так что в приведенном выше массиве я могу иметь хеш с любым именем \%somename, в цикле я хочу, чтобы фактическая строка "somename" находилась в другой переменной. Как и выше, я могу использовать эту строку в качестве имени файла, который создается. Я не могу изменить вышеуказанную хеш-структуру. Это просто там, созданный кем-то другим, я могу только получить к нему доступ.
Спасибо
1 ответ
Учитывая следующий код:
use strict;
use warnings;
my %first = (foo => 2, bar => 3, bat => 5);
my %second = (baz => 7, quux => 11);
my %temp = (a_collection => [\%first, \%second]);
for my $href (@{$temp{a_collection}}) {
for my $key (keys(%$href)) {
print "$key: $href->{$key}\n";
}
}
Это результат производства:
bar: 3
foo: 2
bat: 5
quux: 11
baz: 7
Изменить после предоставления новой информации:
my %first = (foo => 2, bar => 3, bat => 5);
my %second = (baz => 7, quux => 11);
my %temp = (first => \%first, second => \%second);
for my $key (keys(%temp)) {
print "$key\n";
}
Изменить после того, как была предоставлена еще более новая информация:
use JSON::XS;
my %first = (foo => 2, bar => 3, bat => 5);
my %second = (baz => 7, quux => 11);
my %temp = (first => \%first, second => \%second);
for my $key (keys(%temp)) {
open(my $fh, '>', "$key.json") or die $!;
print $fh encode_json($temp{$key});
close($fh);
}
Содержание first.json
:
{"foo":2,"bat":5,"bar":3}
Содержание second.json
:
{"quux":11,"baz":7}