perl null或空检测

AWR*_*RAM 2 string perl hash

我有一个哈希包含匹配子串的结果.如果字符串之间没有匹配,我想打印一条消息.我尝试过以下内容并没有奏效.

foreach (keys %d) { 
    if ($_ eq "") {
        print "no matches"; # and i've tried (if defined $_
    } else {
        print "$_\n";
    }
}
Run Code Online (Sandbox Code Playgroud)

%d以这种方式填充(它包含匹配的子字符串):

foreach (my $i=0;$i<length($seq1)-$k;$i+=1) { 
    my $common=substr($seq1,$i,$k); 
    if ($seq2=~/$common/) {
        $d{$common}++;
    }
}
Run Code Online (Sandbox Code Playgroud)

TLP*_*TLP 6

我想我终于看到了你想要完成的事情.你认为检查键是否%d等于空字符串,然后你的循环中没有匹配.这是错误的.如果没有匹配项,则没有键,循环将永远不会执行.

不幸的是,您无法检查是否%d包含任何值.你需要这样的东西:

unless (%d) { 
    print "No matches\n";
} else {
    print "$_\n" for keys %d;
}
Run Code Online (Sandbox Code Playgroud)