首页 > 解决方案 > Perl 相当于 Python for 循环?

问题描述

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

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

这最终会看起来像这样

编辑:正如蒂姆罗伯茨指出的那样:结果看起来像这样

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

我见过 Perl one liner 做不同的事情,但不是这个。

标签: pythonperl

解决方案


您想要数据结构map内部。它不是单行的。这只是普通的代码。

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

我在被评估的表达式之后使用了带有逗号 ( ) 的表达式形式map( )。花括号 ( ) 是哈希引用构造函数。或者,您可以使用块形式 ( ),它会有一对额外的卷曲。map EXPR, LIST,{}map BLOCK LIST

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

如果你想要一个普通的哈希而不是一个引用,像这样替换。

my %obj = (
# ...
);

推荐阅读