在perl中,对于数字比较,我们有
我之所以问这个问题,是因为我想在字符串列表的末尾添加一个字符串,以确保循环在列表结束之前终止。
+/- inf
作为大于/小于其他任何数字的数字。是否也有字符串是大于/小于任何其他字符串的呢?我之所以问这个问题,是因为我想在字符串列表的末尾添加一个字符串,以确保循环在列表结束之前终止。
+/- inf
作为大于/小于其他任何数字的数字。是否也有字符串是大于/小于任何其他字符串的呢?""
会小于或等于任何其他字符串,而chr(〜0)重复足够的次数将大于或等于该长度或更短的任何字符串。(假设您不使用基于语言环境的排序方式“use locale”)。 (假设您没有使用基于语言环境的排序方式“use locale”。)(chr(〜0)将需要no warnings'utf8'
,因为它不在定义的utf8字符范围内。)chr(〜0)
。由于它不是有效的代码点,因此它不应出现在程序中任何真实数据字符串中。 - cjm这是一个完整的实现,包括测试,用于创建一个比任何其他字符串都大的重载字符串。这是一个相当简单的重载,为什么要费心去做近似处理呢?
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;
空字符串或undef
小于任何其他字符串。
不存在一个有限的字符串比任何其他字符串都大。但是,如果您可以做出某些假设,比如您循环中的所有字符串都是ASCII字符串,那么您可以指定一个字符串"\x80"(ASCII值为128),它将大于所有字符串。