我有一个包含匹配子字符串结果的哈希值。如果字符串之间没有匹配,我想打印一条消息。我尝试了以下内容,但没有用。
foreach (keys %d) {
if ($_ eq "") {
print "no matches"; # and i've tried (if defined $_
} else {
print "$_\n";
}
}
%d以这种方式填充(它包含匹配的子串):
foreach (my $i=0;$i<length($seq1)-$k;$i+=1) {
my $common=substr($seq1,$i,$k);
if ($seq2=~/$common/) {
$d{$common}++;
}
}
答案 0 :(得分:6)
我想我终于看到了你想要完成的事情。您认为检查%d
中的键是否等于空字符串,然后您的循环中没有匹配项。这是错误的。如果没有匹配,则没有密钥,循环将永远不会执行。
很遗憾,您无法检查%d
是否包含任何值。你需要这样的东西:
unless (%d) {
print "No matches\n";
} else {
print "$_\n" for keys %d;
}
答案 1 :(得分:0)
你对所有现有的键都进行了迭代,并检查它是否为空字符串,我想你不是想要的。
尝试
if (defined $d{$_})
或如果设置为“”那么
if ($d{$_} eq "")
为了更有帮助,人们必须知道你的哈希是如何填充的。
您还需要初始化非匹配值。在您的代码中,您可以添加
if ($seq2=~/$common/) {
$d{$common}++;
}
else
{ $d{$common} = 0 unless (exists($d{common})); }
然后检查
if ($d{$_} > 0)