這是本人在編寫PERL程序時積累的一些經驗,在此拋磚引玉,希望大家能都提出寶貴意見。
一、多條件排序
一般我們在做程序時,很多時候需要多條件排序,我們只要知道其中的原理,就會知道其實多條件排序是非常容易的。
首先我們先把條件各自對應放到幾個數組中,然后我們對其中一個數組進行排序,由于其他數組和這個排序的數組值是一一對應的,我們就可以列出其他的數組項了。下面舉例說明:(test.cgi排序程序;test.txt 需要排序的文件)
test.cgi
#!/usr/bin/perl
print "Content-type:text/html/n/n";
open (FILE,"/free/hd1/cqiao/test.txt") || die "Open FileError:$!";#打開文件
@test=; close(FILE); $index=0;
foreach $_ (@test) { #從文件中讀取值
($s1,$s2,$s3,$s4)=split(//|/,$_);
$s1list[$index]=$s1;#分別放入不同數組
$s2list[$index]=$s2;
$s3list[$index]=$s3;
$s4list[$index]=$s4;
$index++;
print "s1:$s1 s2:$s2 s3:$s3 s4:$s4 ";
}
@indexs1=sort sorts1 0..$#s1list;#按不同條件排序
@indexs2=sort sorts2 0..$#s2list;
print "安s1排序 ";
foreach $_ (@indexs1) {
print "s1:$s1list[$_] s2:$s2list[$_] s3:$s3list[$_] s4:$s4list[$_]";
}
print "安s2排序 ";
foreach $_ (@indexs2) {
print "s1:$s1list[$_] s2:$s2list[$_] s3:$s3list[$_] s4:$s4list[$_]";
}
exit;
sub sorts1 {
$s1list[$a] cmp $s1list[$b]; #字符比較
}
sub sorts2 {
$s2list[$a]<=>$s2list[$b]; #數字比較
}
test.txt
cqiao|1|5|d
abs|5|1|f
dfk|7|5|fd
hnd|4|2|d
dfj|10|3|d
dfj|11|5|df
同樣按s3、s4排序,只要把s1、s2的排序換成s3、s4就可以
2、perl中包的應用
一般情況下,我們編寫perl程序要用require調用一些常用的函數,但是這樣會影響程序的速度,其實只要有些編程基礎的人應該可以想到,在c++或vb中都有對象、類這個概念,而作為一個優(yōu)秀的語言,perl不可能沒有,那就是包概念。
舉例說明: 在我編寫cqbbs正式版的時候就采用了包。
1、在程序目錄下建立CQBBS子目錄。
2、常用的函數放在CQBBS下的common.pm文件中。
3、common.pm的頭部信息:
package CQBBS;#定義包
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw( GetForm GetCookies SetCookies GetLongTime GetTimemessage
many UbbCode spite OpenDbm ReadUser );#常用函數名
4、在應用程序bbs.cgi中定義:
package CQBBS;
BEGIN {
eval {
($0 =~ m,(.*)/[^/]+,) and unshift (@INC, "$1");
($0 =~ m,(.*)//[^//]+,) and unshift (@INC, "$1");
};
}
BEGIN {
use CQBBS::common;
}
這樣,我們就能使用common.pm重的所有函數,而且速度一點也不影響。
使用方法: CQBBS::message;
|
新聞熱點
疑難解答