从哈希中对Perl展平数组导致ARRAY

时间:2017-07-22 22:32:44

标签: arrays perl

我试图使用以下内容展平散列中包含的数组:

foreach my $key (keys %months) {
    foreach (%months->{$key}) {
       %months->{$key} = $key . ' ' . join(',', %months->{$key});
    }
}

我试图生成一连串的日子,如:

"2, 11, 15, 18, 25"

但我明白了:

ARRAY(0x5a2e7b0)

%months的结构是:

months {
    Jan: [1,5,30],
    Feb: [2,6]
}

1 个答案:

答案 0 :(得分:2)

哈希"中包含的" 数组必须是数组引用,一个标量(哈希值必须是什么)。

因此,当您检索它时,您需要取消引用它

my $date_list = join ', ', @{ $months->{$key} };

您可以从中生成所需的字符串

$months

这假设% hashref ,由问题中的箭头解除引用判断。然后months前面的foreach my $key (keys %$months) { say join ', ', $key, @{$months->$key}}; } 错误。还有一个额外的循环。对于显示的数据

say join ', ', $_, @{$months->$_}}  for keys %$months;

foreach my $key (keys %$months) {
    foreach ($months->{$key}) {
       say join ', ', @{$months->{$key}->{$_}};
    }
}

问题中的代码适用于具有另一级嵌套的数据

   say join ', ', $key, $_, @{$months->{$key}->{$_}};

仅加入最后一级的arrayref数据,或

$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';', DB_HOST, DB_PASSWORD);

连接两个键和arrayref数据。