首页 > 解决方案 > 如果基于条件的查找不起作用

问题描述

我想查找一个范围,并返回组 id,尽管一个简单的基于 if 的查找会起作用。但是,它不起作用,我不知道为什么。有人可以帮忙吗?

#!/usr/bin/perl

sub get_xid {
        my $x_id = "";

        if(($_[0] ge 1) && ($_[0] le 4))        { $x_id = "x.1"; }
        if(($_[0] ge 5) && ($_[0] le 8))        { $x_id = "x.2"; }
        if(($_[0] ge 9) && ($_[0] le 12))       { $x_id = "x.3"; }
        if(($_[0] ge 13) && ($_[0] le 16))      { $x_id = "x.4"; }
        if(($_[0] ge 17) && ($_[0] le 20))      { $x_id = "x.5"; }
        if(($_[0] ge 21) && ($_[0] le 24))      { $x_id = "x.6"; }
        if(($_[0] ge 25) && ($_[0] le 28))      { $x_id = "x.7"; }
        if(($_[0] ge 29) && ($_[0] le 32))      { $x_id = "x.8"; }

        return $x_id;
}

for($i=1;$i<=31;$i++) {
        $x_id = &get_xid($i);
        print " i: $i, x_id: $x_id\n";
}

结果:

 i: 1, x_id: x.1
 i: 2, x_id: x.5
 i: 3, x_id: x.8
 i: 4, x_id: x.1
 i: 5, x_id: x.2
 i: 6, x_id: x.2
 i: 7, x_id: x.2
 i: 8, x_id: x.2
 i: 9, x_id: 
 i: 10, x_id: x.1
 i: 11, x_id: x.1
 i: 12, x_id: x.1
 i: 13, x_id: x.4
 i: 14, x_id: x.4
 i: 15, x_id: x.4
 i: 16, x_id: x.4
 i: 17, x_id: x.5
 i: 18, x_id: x.5
 i: 19, x_id: x.5
 i: 20, x_id: x.5
 i: 21, x_id: x.6
 i: 22, x_id: x.6
 i: 23, x_id: x.6
 i: 24, x_id: x.6
 i: 25, x_id: x.7

标签: perl

解决方案


在 Perl 中,数字的比较运算符是<, ==, >, <=, >。如果您使用字符串运算符(lege等),则将数字作为字符串进行比较。因此,例如,10大于1但小于4

另请注意,您正在进行冗余测试。考虑

    if($_[0] < 1)            { you didn't cover this case }
    elsif($_[0] <= 4)        { $x_id = "x.1"; }
    elsif($_[0] <= 8)        { $x_id = "x.2"; }
    elsif($_[0] <= 12)       { $x_id = "x.3"; }
    etc...

推荐阅读