2

我想将哈希哈希的键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

4 回答 4

1

这是记录不足的,我不知道到底是什么问题,但是智能匹配运算符在引用数组和散列时效果更好。所以你可能会有更好的运气

/$reg/ ~~ \%Hoh
于 2012-09-14T14:25:36.353 回答
1

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

无论如何,更明确地说明你想要什么会更好。

于 2012-09-14T14:51:36.787 回答
1

也许你只想

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

或者可能

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

但如果这些都不正确,那么你需要更好地解释你需要什么,并举一些例子

于 2012-09-14T12:03:25.730 回答
0

很可能,您的错误在这里:

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

应该读

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

. 大概。

于 2012-09-15T03:53:53.440 回答