我希望将 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
此代码适用于此示例数据,但不适用于实际数据!!我的数据更复杂,但结构是一样的我想知道是否还有其他方法可以做到这一点
答案 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}}) {
。可能。