perl null 或空检测

发布于 2024-12-21 08:26:31 字数 435 浏览 0 评论 0原文

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

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

I have a hash containing results of matching substrings. I want to print a message if there is no matching between the string. I've tried the following and it didn't work.

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

the % d is filled this way (it contains matched substrings) :

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

丑疤怪 2024-12-28 08:26:31

我想我终于明白了你想要实现的目标。您认为检查 %d 中的键是否等于空字符串,则循环中没有匹配项。这是错误的。如果没有匹配项,则没有键,循环将永远不会执行。

不幸的是,您无法通过这种方式检查 %d 是否不包含任何值。你需要类似的东西:

unless (%d) { 
    print "No matches\n";
} else {
    print "$_\n" for keys %d;
}

I think I finally see what you are trying to accomplish. You think that checking if the keys in %d equal the empty string, then there were no matches in your loop. This is false. If there are no matches, then there are no keys, and the loop will never execute.

Unfortunately, you cannot check if %d contains no values that way. You need something like:

unless (%d) { 
    print "No matches\n";
} else {
    print "$_\n" for keys %d;
}
沉溺在你眼里的海 2024-12-28 08:26:31

您对所有现有键进行迭代并检查它们是否是空字符串,我想这不是您想要的。

尝试一下

if (defined $d{$_})

,或者如果它设置为“”,那么

if ($d{$_} eq "")

为了更有帮助,人们必须知道你的散列是如何填充的。

您还需要初始化不匹配的值。在您的代码中,您可以添加

if ($seq2=~/$common/) {
    $d{$common}++;
}
else 
{ $d{$common} = 0 unless (exists($d{common})); }

然后检查

if ($d{$_} > 0)

You have an iteration over all existing keys and check if the are an empty string, that's I guess not what you want.

Try

if (defined $d{$_})

or if it is set to "" then

if ($d{$_} eq "")

To be more helpfull, one would have to know how your hash is filled.

You need to initialize also the non matching values. In your code you can add an

if ($seq2=~/$common/) {
    $d{$common}++;
}
else 
{ $d{$common} = 0 unless (exists($d{common})); }

and then check

if ($d{$_} > 0)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文