从perl中的散列打印数组值

时间:2015-11-19 03:50:46

标签: perl perl-hash

我是perl的新手,这件事让我疯狂。我有一个哈希如下

class TestSource(models.Model):
    name = models.CharField(max_length=100, primary_key=True)

我希望将数组元素作为字符串输出,这样我就可以将它们用作循环中的args。我有以下代码

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

我得到了转换为json的部分。我可以把它打印到stdout。现在我想把它写到一个文件。这里$ file应该有名字" first"和"第二"。因此,循环将创建两个文件,其中包含上述哈希中的哈希变量的名称。我希望文件名匹配,以便我可以跟踪创建的内容。

编辑: 基本前提很简单。无论我做什么,无论是json编码等,我都希望哈希变量名称为字符串。所以在上面的数组中,我可以使用任何名称\%somename的哈希,在循环中我想要实际的字符串" somename"在一个不同的变量。如上所述,我可以使用此字符串作为创建的文件名。我无法改变上面的哈希结构。它就在那里,由其他人创建,我只能访问它。

谢谢

1 个答案:

答案 0 :(得分: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";
}

在提供更多新信息后进行编辑:

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}