哈希哈希的智能匹配运算符

时间:2012-09-14 11:40:12

标签: perl hash match

我希望将 hash hash 的键与regexp匹配。

$line=" Cluster(A,B):A(T) M(S)";
$reg="Cluster";
my ( $cluster, $characters ) = split (/:/,$line);
$HoH{$cluster}={split /[( )]+/,$characters } ;
foreach $value(keys %HoH){
    foreach $characters (keys %{$HoH{$cluster}}){
        print "$value:$characters\n" if    /$reg/ ~~ %HoH;
    }
}

现在输出是:

群集(A,B):A

集群(A,B):M

此代码适用于此示例数据,但不适用于实际数据!!我的数据更复杂,但结构是一样的我想知道是否还有其他方法可以做到这一点

4 个答案:

答案 0 :(得分:1)

也许你只想要

print "something\n" if exists $HoH{regexp}

或者

print "something\n" if grep /regexp/, keys %HoH

但如果这些都不正确,那么你需要更好地解释你需要的东西,并给出一些例子

答案 1 :(得分:1)

这是有记录的,我不确切地知道问题是什么,但智能匹配运算符更适合对数组和哈希的引用。

,你可能会有更好的运气
/$reg/ ~~ \%Hoh

答案 2 :(得分:1)

SmartMatch目前复杂,笨拙且令人惊讶。不要使用它,至少现在不要。有关perl的主要开发人员的讨论,要么大大简化它,要么完全删除它。无论哪种方式,它都不会做你将来要求它做的事情,所以现在不要依赖它。

无论如何,更明确地表达你想要的东西。

答案 3 :(得分:0)

最有可能的是,你的错误就在这里:

foreach $characters (keys %{$HoH{$cluster}}) {

应阅读

foreach $characters (keys %{$HoH{$value}}) {

。可能。