使用模式匹配进行哈希的数组

时间:2014-03-05 10:05:14

标签: perl pattern-matching

@ops数组包含以下内容

status: 0
duration: done
name: NA:/ny/wdc
system: legacy
type: new

我正在尝试使用下面的

制作哈希
foreach my @op (@ops) {
    my ($k, $v) = $op =~ /^(.*): (.*)$/;
    $r{$k}     = $v;
}

但它没有用,请建议

2 个答案:

答案 0 :(得分:1)

您尚未说明它无法以何种方式运作,但foreach my @op (@ops)应为foreach my $op (@ops)。你一次从数组中取一个东西,一个项目是标量($),而不是数组(@)。

答案 1 :(得分:1)

foreach循环中的循环变量必须是单个标量。将@op更改为$op

foreach my $op (@ops) {

您还可以将代码简化为my %r = map /^([^:]+): (.*)/, @ops,因为列表上下文中的正则表达式匹配会返回捕获列表。