Perl多维哈希

时间:2015-10-11 03:53:10

标签: perl hash

我有一个配置文件,其中包含以下内容之一:

[EXCLUDE_LIST]
c1=A
c2=B|C
c3=A
c1=B

我有一个perl脚本,它包含一个sub,它从config读取上面的部分,并检查配置中是否存在特定的组(cX)。此子的输入参数是与配置文件绑定(使用tie)的哈希。当我调试代码时,我试图显示EXCLUDE_LIST部分的所有内容,程序在显示c1值时打印了一些垃圾ARRAY [memory_address]。这是因为c1有重复的条目。

我的问题:如果有任何重复的条目,如何在上面的子程序中包含验证逻辑以退出进程。

这是我的脚本中访问配置节条目的方式:

$cfg->{EXCLUDE_LIST}->{cX}

TIA。

1 个答案:

答案 0 :(得分:1)

如果您告诉我们您用过哪个模块来读取您的配置文件,或者它是自定义软件(这是一个坏主意,因为那里已经有很多配置文件模块),那将非常有用,那么您应该向我们展示代码。没有这些信息,这个答案必须是(知情的)猜测

我怀疑用于读取配置文件的任何内容都通过存储给定密钥的所有不同值的数组来处理重复的条目。在您的情况下,$cfg->{EXCLUDE_LIST}{c1}的值为['A', 'B']

您可以通过检查哈希值是否为引用来处理此问题,例如

while ( my ($key, $val) = each %{ $cfg->{EXCLUDE_LIST} } ) {

    if ( ref $val ) {
        print "$key=", join(',', @$val), "\n";
    }
    else {
        print "$key=$val\n";
    }
}
  

我的问题:如果有任何重复的条目,如何在上面的子程序中包含验证逻辑以退出进程。

您可以进行类似的测试,但die如果值是参考

die qq{Multiple occurrences of "$key"} if ref $val;