perl null或空检测

时间:2011-12-15 08:07:08

标签: string perl hash

我有一个包含匹配子字符串结果的哈希值。如果字符串之间没有匹配,我想打印一条消息。我尝试了以下内容,但没有用。

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}++;
    }
}

2 个答案:

答案 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)