如何创建多个具有相同数据的哈希引用?

4

我试图创建许多内容相同的哈希引用。使用 x 运算符会得到相同引用的副本。如何获得不同的引用?

我需要不同的引用,以便稍后可以独立更新它们。

我的代码:

use strict;
use warnings;
use autodie;

use feature qw(say);
use open ':std', ':encoding(UTF-8)';

my %UNIT_COUNT = (
    numsys   => 6,
    alg      => 20,
    geo      => 15,
    cogeo    => 6,
    trig     => 12,
    mensur   => 10,
    statprob => 11
);

my $out = [
       map {
            ( { unit => $_, weight => 1 } ) x
              ( $UNIT_COUNT{$_} )
        } keys %UNIT_COUNT
    ];

use Data::Dumper;
print Dumper($out);

我不确定我是否理解了这个问题 - 那些许多哈希引用应该是什么内容?您是否希望每个引用都有给定哈希表(此处为%UNIT_COUNT)的副本,还是您正在尝试从中构建不同的数据? - zdim
@zdim 我想要替换掉 { unit => $_, weight => 1 } ) x ( $UNIT_COUNT{$_} ) 这一部分,它会产生不同的 hashrefs。我想为 %UNIT_COUNT 中的每个键 $_ 创建一个包含 $UNIT_COUNT{$_} 个 hashrefs 的列表。hashrefs 的内容取决于键,但除此之外是相同的。@toolic 给出的答案符合我的要求。我想知道是否有更简洁/清晰的方法来实现这一点。 - pii_ke
哦,好的。我(真的 :) 不明白你的意思,也不明白 toolic 的输出原因(当然我理解代码),但显然不是我想象中的。谢谢你澄清并纠正我的错误回答。 - zdim
@zdim,你可以将其视为将离散频率分布转换为原始数据观测值的过程,以便后续可以独立地修改这些观测值。 - pii_ke
1个回答

7
这里使用了另一个map而不是x运算符,但它会为您提供副本:
my $out = [
    map {
        my $k = $_;
        map { { unit => $k, weight => 1 } } 1 .. $UNIT_COUNT{$_}
    } keys %UNIT_COUNT
];

部分输出:

$VAR1 = [
          {
            'unit' => 'mensur',
            'weight' => 1
          },
          {
            'weight' => 1,
            'unit' => 'mensur'
          },
          {
            'unit' => 'mensur',
            'weight' => 1
          },
          {
            'unit' => 'mensur',
            'weight' => 1
          },

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接