Hash值的Perl正则表达式

时间:2013-07-19 19:48:35

标签: regex perl hash

我的哈希值如下所示:

   build -var ver=2.1.0.0 -var buildnum=WorkSet/2.1.0_suiteB_3o -var product=cisco6500 platform=NSA prodtype=Debug HOST=10.9.33.22 -var clist=

   build -var ver=2.1.0.0 -var buildnum=WorkSet/2.1.0_suiteB_3o -var product=juniper6700 platform=NSA prodtype=Prod HOST=10.9.33.22 -var clist=

我正在尝试分离哈希值以创建另一个哈希值,使其如下所示:

   My $list = {'2.1.0.0' => { 'branch' => Workset/2.1.0'
               'products' => [{product => 'cisco6500',
                                prodType => 'Debug'},
                                {product => 'juniper6700',
                                prodType => 'Prod'}]

} }

我写过这样的话:

    if ($cmd =~ m/ver=(\d.\d.\d.\d)/){
            $version = $1;
    }
    if ($cmd =~ m/buildnum=(\w+.\/\d.\d.\d)/){
            $branch = $1;
    }
    if ($cmd =~ m/product=(\s+)/){
            $product = $1;
    }

}

现在,我对如何在哈希和数组中同时插入哈希感到困惑。请问是否有人可以提出建议。谢谢。

1 个答案:

答案 0 :(得分:1)

可以毫无问题地构建分支:

$list->{$version}{branch} = $branch;

对于产品,您应该将它们推送到您必须取消引用的阵列上:

push @{ $list->{$version}{products} },
        { product  => $product,
          prodType => $prodtype,
        };

在最近的Perl版本中,不需要取消引用,因此您可以直接推送到数组引用。