代码之家  ›  专栏  ›  技术社区  ›  Ryan C. Thompson

对于字符串比较,perl是否有+/-无穷大的等价项?

  •  3
  • Ryan C. Thompson  · 技术社区  · 14 年前

    在perl中,为了进行数值比较,我们有 +/- inf 作为大于/小于其他数字的数字。是否也存在 gt / lt 还有别的绳子吗?

    我问这个问题的原因是我想在字符串列表的末尾加上一个或另一个,以确保循环在列表的末尾之前终止。

    3 回复  |  直到 14 年前
        1
  •  2
  •   mob    14 年前

    空字符串或 undef

    没有比其他字符串大的有限字符串。但是,如果可以做出某些假设,比如循环中的所有字符串都是ASCII字符串,那么可以指定一个大于所有字符串的字符串,比如“\x80”(ASCII值128)。

        2
  •  4
  •   ysth    14 年前

    不,但是 ""

    (chr(~0)将需要 no warnings 'utf8' ,因为它不在定义的utf8字符范围内。)

        3
  •  3
  •   Schwern    14 年前

    package String::Infinity;
    
    use overload
        '""'  => sub {
            return "Infinity"
        },
        'cmp' => sub {
            my($left, $right, $reverse) = @_;
            return 0 if ref $right && $right->isa("String::Infinity");
            return $reverse ? -1 : 1;
        },
        fallback => 1
    ;
    
    sub new {
        my $class = shift;
        return bless \Inf, $class;
    }
    
    
    use Test::More;
    
    my $inf = String::Infinity->new;
    is "$inf", "Infinity",  "stringification";
    ok $inf eq $inf,        "equals itself"; 
    ok $inf ne "foo",       "  doesn't equal anything else";
    ok $inf ne "Infinity",  "  even what it stringifies to";
    ok $inf gt "lfkdlk",    "  greater than";
    ok !$inf lt "lkafj",    "  not less than";
    is $inf cmp "lkjd", 1,  "  cmp";
    is "ldfjal;kjd" cmp $inf, -1,   "  cmp reversed";
    
    done_testing;