Quote: http://perl.hcchien.org/ch12.html
use strict;
my @ip = (“140.21.135.218”, “140.112.22.49”, “140.213.21.4”, “140.211.42.8”);
my @order = sort ipsort @ip; # 直接叫用副常式
print “$_
” for @order;
sub ipsort {
my ($a1, $a2, $a3, $a4) = $a =~ /(d+).(d+).(d+).(d+)/; # 分為四個數字
my ($b1, $b2, $b3, $b4) = $b =~ /(d+).(d+).(d+).(d+)/;
$a1 <=> $b1 or $a2 <=> $b2 or $a3 <=> $b3 or $a4 <=> $b4; # 進行多子鍵排序
}
這個程式的重點在於兩個部份,第一個部份是直接叫用副常式進行排序。所以我們看到在這裡,我們呼叫了副常式ipsort來幫我們進行多子鍵的排序部份。而且我們一樣可以直接在副常式之中使用預設變數$a,$b。在我們把排序的程式放進副常式之後,我們就開始進行ip的拆解工作,利用正規表示式把每一個ip 都拆解成四個部份。所以我們就分別有了$a1…$a4以及$b1…$b4這樣的子鍵。然後利用子鍵來進行排序,並且利用or來作為是否進行下一個子鍵排序的關鍵。因為太空船符號的比較會傳回-1, 0 或是 1,因此如果是0就表示兩者相等,於是繼續比對下一個子鍵。利用這樣排序之後,我們就可以得到這樣的結果:140.21.135.218
140.112.22.49
140.211.42.8
140.213.21.4
留言