Perl 相当于 Python for 循环?

Perl equivalent of Python for loop?

是否有与以下 Python 代码等效的 Perl?

names['name'] = ['Bob', 'Bill', 'Terry']
obj = {'Students': [ {'Names': name} for name in names['name']]}

最终看起来像这样

编辑: 正如 Tim Roberts 指出的那样:结果看起来像这样

[ {'Names': "Bob" }, { "Names": "Bill" },. { "Names": "Terry" } ]

我见过 Perl 的一个衬里做不同的事情,但不是这个。

你想要 a map 在你的数据结构中。这不是单线的。这只是普通代码。

my $obj = {
  'Students' => [
    map { 'Names' => $_ }, @{ $names{name} }
  ]
};

我使用了表达式形式 map (map EXPR, LIST),在被计算的表达式后面有一个逗号 (,)。花括号 ({}) 是散列引用构造函数。或者,您可以使用块形式 (map BLOCK LIST),它会有一对额外的卷发。

    map { { 'Names' => $_  } } @{ $names{name} }

如果您想要一个普通的散列而不是一个引用,请像这样替换。

my %obj = (
# ...
);

这是另一种方法:

use Data::Dumper;
my @names = ('Bob', 'Bill', 'Terry');

my %out_dict;

my @students_dict = ();
foreach my $name (@names) {
    push(@students_dict, {'Names' => $name});
}

$out_dict{'Students'} = \@students_dict;
print Dumper \%out_dict;

输出:

$VAR1 = {
          'Students' => [
                          {
                            'Names' => 'Bob'
                          },
                          {
                            'Names' => 'Bill'
                          },
                          {
                            'Names' => 'Terry'
                          }
                        ]
        };