perl - 如何从 Perl 中的映射返回哈希引用列表?

标签 perl list map

我有以下大部分没问题的代码:

my $results = { data => [
   map {
      my $f = $_->TO_JSON;
      $f->{display_field} = $_->display_field($q);
      $f;
   } $rs->all
]};

只是我更希望它更像下面这样:

my $results = { data => [
   map {
      %{$_->TO_JSON},
      display_field => $_->display_field($q),
   }, $rs->all
]};

但这会导致语法错误。我怎样才能做我想做的事,或者我当前的版本是最好的?

更新:对之前多出来的分号感到抱歉。这里很晚了。不知道我是怎么错过的。谢谢大家!

最佳答案

它只会给出一个语法错误,因为 Perl 认为您需要省略 map { ... } 之后的逗号,因为它将把该映射解析为一个 block ,而不是一个表达式。将 + 放在前面可以解决这个问题。另外,匿名散列中不能有分号:

my $results = { data => [
   map +{
#      ^----------------- plus sign added
      %{$_->TO_JSON},
      display_field => $_->display_field($q);
#                                           ^---- should be comma or nothing
   }, $rs->all
]};

关于perl - 如何从 Perl 中的映射返回哈希引用列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1403607/

相关文章:

functional-programming - Clojure:测试 map 操作中的每个值是否为真

bash - Perl 在一个大文本文件中进行多项搜索和替换操作

jquery - 带有 block 嵌套列表的内联列表用于菜单

linux - 如何在 perl 脚本中使用 linux bash 命令?在 perl 脚本中使用它时出现错误

c# - 从 C# 列表中删除重复项和原始项

java - 对象数组

C++ map 插入和查找性能和存储开销

java - Java小数据集的数据查找方法?

linux - 用于捕获在反引号中执行的命令的 stderr 和 stdout 的 Perl 脚本

linux - Perl IPC 不使用共享内存?