言語
サーバ関連
ツール
API
読み物
その他
[AD]
以下のようなコードを書くと、文字列として扱われてしまい、意図した結果にならない場合がある。
@array = ( 1, 2, 3, 4, 5, 10, 11, 12 ); foreach(sort @array){ print ; print "\n" } <code> この実行結果は以下になる。 <code> 1 10 11 12 2 3 4 5
これを回避するコードは次のようなものである。
@array = ( 1, 2, 3, 4, 5, 10, 11, 12 ); #-- 昇順 --# foreach(sort {$a <=> $b} @array){ print ; print "\n" } #-- 降順 --# foreach(sort {$b <=> $a} @array){ print ; print "\n" }
1 2 3 4 5 10 11 12 12 11 10 5 4 3 2 1
昇順と降順は、$a,$bの位置を変更するだけである。 ちなみに、$a, $bは my などをつけなくても、Perl上ですでに定義されているため、use strictした環境でもエラーにはならない。
なお、文字列して比較したい場合には ⇔をcmpに置き換える。
use strict; my @array = ( 1, 2, 3, 4, 5, 10, 11, 12 ); foreach(sort {$a cmp $b} @array){ print ; print "\n" } print "\n"; foreach(sort {$b cmp $a} @array){ print ; print "\n" }
1 10 11 12 2 3 4 5 5 4 3 2 12 11 10 1
failed to fetch data: unkown error
failed to fetch data: unkown error