2015-11-19 35 views
-6

我是perl的新手,这件事让我感到非常紧张。我有一个哈希如下在perl中打印一个哈希数组值

%temp = (
    a_collection => [\%first, \%second] 
) 

我想要得到的数组元素作为一个字符串,这样我就可以把它们用作循环ARGS。我有以下代码

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”在不同的变量中。如上所述,我可以使用这个字符串作为创建的文件名。我无法改变上面的哈希结构。它只是在那里,由别人创建,我只能访问它。

由于

+0

你的循环不会将数据匹配您在上面张贴的结构。你正在使用的* actual *代码是什么? –

+0

@ user775093你究竟在尝试什么?你是否在数组的哈希中引用哈希?如果你想这样做,请看下面的答案。或其他任何编辑您的帖子? – mkHun

+1

你已经完全改变了这个问题,它仍然和以前一样不清楚,但我的答案的基本前提仍然是一样的:散列键。 –

回答

0

给出的以下的代码:

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"; 
} 

编辑后提供的又更多新品信息:中first.json

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); 
} 

内容:的second.json

{"foo":2,"bat":5,"bar":3} 

内容:

{"quux":11,"baz":7} 
+0

这不是我想要的。输出应该是“第一”和“第二” – user775093

+2

然后你应该创建一个名为'first'和'second'的密钥。 –