我编写了以下程序来测试Perl评估ASCII值及其if
/ elsif
语句的能力。
我想避免使用语言的排序功能。
#test ASCII values using if and elsif
$s = '4';
$j = 'a';
$k = "AS";
#1st print the variable with the lowest ASCII value
if ($s <= $j && $s <= $k) {
say $s;
$s = 1000;
} elsif ($j <= $s && $j <= $k) {
say $j;
$j = 1000;
} elsif ($k <= $j && $k <= $s) {
say $k;
$k = 1000;
}
#print the variable with the 2nd lowest value
if ($s <= $j && $s <= $k) {
say $s;
$s = 1000;
} elsif ($j <= $s && $j <= $k) {
say $j;
$j = 1000;
} elsif ($k <= $j && $k <= $s) {
say $k;
$k = 1000;
}
#print the variable with the 3nd lowest value
if ($s <= $j && $s <= $k) {
say $s;
$s = 1000;
} elsif ($j <= $s && $j <= $k) {
say $j;
$j = 1000;
} elsif ($k <= $j && $k <= $s) {
say $k;
$k = 1000;
}
我的输出如下:
52
97
65
a
AS
4
但正确的结果是:
52
97
65
4
AS
a
提前谢谢你。欢迎提出如何改进我的问题写作的提示。
答案 0 :(得分:0)
始终使用use strict; use warnings;
!后者会告诉你,你正在使用数字比较运算符(例如<
),你应该使用字符串比较运算符(例如lt
)。
但你可以简单地使用以下内容:
say for sort $s, $j, $k;
答案 1 :(得分:0)
您希望使用ord
函数来获取参数的第一个字符的数值。这是每个字符,而不是每个字节,这意味着Unicode可以正常工作。 http://perldoc.perl.org/functions/ord.html了解更多信息。