PerlがASCII値を評価する能力をテストする次のプログラムとそのif
/elsif
文を書きました。Perlプログラミング演習 - ASCII値を比較するにはどうすればよいですか?
言語の並べ替え機能の使用を避けたいと思います。
#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
事前にありがとうございます。私の質問文を改善するためのヒントは大歓迎です。
厳密と警告をオンにすると、数字以外の文字に対して数値比較を実行しようとしていることがわかります。だから、 "厳密に使う"と "警告を使用する";あなたのvarsを "my $ s;"と宣言します。それを実行すると、警告が表示されます。比較演算子のperldoc perlopをチェックアウトします。 – jmcneirney
私は混乱しています。 「52」、「97」、「65」はどこから来たのですか?それらはあなたの入力の '4'、' a'、 'AS'の最初の文字の順序値ですが、私はあなたがそれらをどこで計算するか分かりません。とにかく、Perlには2組の比較演算子があります。 '<'、 '='、 '!='、 '>'、 '> ='、 '<=>'、数値比較のために 'lt'、' le'、 'eq'、' ne '、' ge'、 'gt'、' cmp'を使ってレキシカル(文字列)を比較します。 ['perldoc perlop'](http://metacpan.org/pod/perlop)を参照してください。 – mob
言い換えれば、ASCIIを取得したい(そして '==、<, >'演算子を使って計算する)場合は、文字列を変換する必要があります。たとえば、 'ord'や' unpack'などでそれを行うことができます。 (そして、それはあなたが "出力"でそれを示しているので、何とかしているように思えます。つまり、完全な例を表示します。)Perlでは、数値や文字列をスカラー変数に格納することができますが、あなたはいつも物事が関係なく働くことを期待することはできません。 – zdim