Perl编程练习 - 如何比较ASCII值?

时间:2016-10-18 22:27:22

标签: perl if-statement ascii

我编写了以下程序来测试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

提前谢谢你。欢迎提出如何改进我的问题写作的提示。

2 个答案:

答案 0 :(得分:0)

始终使用use strict; use warnings;!后者会告诉你,你正在使用数字比较运算符(例如<),你应该使用字符串比较运算符(例如lt)。

但你可以简单地使用以下内容:

say for sort $s, $j, $k;

答案 1 :(得分:0)

您希望使用ord函数来获取参数的第一个字符的数值。这是每个字符,而不是每个字节,这意味着Unicode可以正常工作。 http://perldoc.perl.org/functions/ord.html了解更多信息。