在perl中,为了进行数值比较,我们得到+/- inf
作为大于/小于其他所有数字的数字。是否还有gt
/ lt
任何其他字符串的字符串?
我问的原因是我想在字符串列表的末尾添加一个或另一个,以确保循环在列表结尾之前终止。
答案 0 :(得分:4)
没有。但是""
将小于或等于任何其他字符串,并且重复足够时间的chr(~0)将大于或等于该长度或更小的任何字符串。 (假设您没有通过'使用区域设置'使用基于区域设置的排序规则。)
(chr(~0)将需要no warnings 'utf8'
,因为它不在定义的utf8字符的范围内。)
答案 1 :(得分:3)
这是一个完整的实现,其中包含比任何其他字符串更大的重载字符串的测试。它是一个非常简单的重载,为什么要使用近似值?
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;
答案 2 :(得分:2)
空字符串或undef
小于其他所有字符串。
没有有限的字符串比每个其他字符串都大。但是,如果您可以做出某些假设,例如循环中的所有字符串都是ASCII字符串,那么您可以指定一个类似于“\ x80”(ASCII值128)的字符串,该字符串将大于您的所有字符串。