You are on page 1of 105

LOGO

BO CO TIN SINH HC Chuyn 8


Nhm 4: ng Th Phng Phm Th Ngn Nguyn Th Thng Trn Th Ngc Nguyn Minh Phng

Ni dung chuyn
Tm hiu v Ngn ng lp trnh Perl : I. Cc kiu d liu II. Vo/ra tp III. Chng trnh con IV. Ci t v s dng th vin BioPerl, s dng BioPerl cho bi ton sp cp trnh t v sp a trnh t.

I.

Cc kiu d liu

1. Kiu d liu danh sch (list) 2. Kiu d liu mng (array) 3. Kiu d liu mng bm (hash)

1.
1.1 1.2

Kiu d liu danh sch (list)

Khi nim danh sch Khong danh sch

1.1 Khi nim danh sch


Mt danh sch l mt dy cc bin v hng sp xp theo th t c t trong cp ngoc n ( ). Mt danh sch c th c bao nhiu phn t cng c v cha bt k gi tr v hng no. V d: (jerry, 1, 2.5): danh sch gm c 3 phn t : xu jerry, hai s 1 v 2.5 (0, $a, $b + $c): danh sch c 3 phn t : 0, gi tr ca $a, gi tr ca tng $b + $c. Cc danh sch cng c th cha cc biu thc di dng mt phn ni dung ca chng V d: (3+5, $a*$b, HUA, 21 ): Danh sch ny cha 4 gi tr v hng sau y: 8, kt qu ca biu thc $a*$b, xu HUA v 21.

1.2 Khong danh sch


Ta nh ngha mt danh sch bao gm cc s t 0 n 9 nh sau: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Tuy nhin c mt cch n gin hn l phi vit tng s ra.Perl cung cp cho ta ton t .. nh ngha danh sch c cc phn t ni tip nhau nh sau: (1..10): danh sch gm cc s t 1 n 10 (a..z): danh sch gm cc ch ci thng ($dau..$cuoi + 1): danh sch gm cc gi tr nm trong khong t gi tr ca $dau n gi tr ca $cuoi+1 (1, 3..6, 8): danh sch gm cc phn t 1, 3, 4, 5, 6, v 8 (1.5..4.1): danh sch gm 1.5, 2.5, 3.5 (s 4.5 ln hn 4.1 nn khng c a vo danh sch) (3.4..1.2): danh sch ny khng c phn t no v 3.4 > 1.2

Ta cng c th dng khong danh sch vi xu. V d:


(xxa..xxc) tng ng vi danh sch (xxa, xxb, xxc) (xxy..xxb) tng ng vi danh sch (xxy, xxz, xxa, xxb) @ngay = (01..31);

to ra mt mng @ngay cha cc phn t l ngy trong thng : 01, 02, ... 31

2.
2.1 2.2 2.3 2.4 2.5 2.6 2.7

Kiu d liu mng

Khi nim mng Khai bo Truy nhp Sp xp mng S cc phn t ca mng In ra cc phn t ca mng Mt s hm cho mng

2.1 Khi nim mng


Mng l mt dy d liu cng kiu, c t di tn
chung v lu b nh trong, bin mng c biu th bng k t @ u tin, tip theo sau l tn theo qui c.

2.2 Khai bo
C php:

@ <tn mng> = (<cc gi tr>);


V d: @mang1 = (1, 2 , 3); Tn ca mng c th trng vi tn ca bin c $mb = 7; @mb = (4, 5, 6);

y mb c s dng cho c mng @mb v bin $mb. Perl


phn bit c u l bin u l mng nh vo k t c bit @ v $. Tuy nhin, khng nn t tn theo kiu ny, d gy

nhm ln.

2.3 Truy nhp


C php: <tn_mng> [<ch_s>]
<tn_mng> y bt u bng k t $ ch khng phi l @ bi v ta truy nhp ti mt phn t ring r nh l mt bin v hng.

Mng trong Perl bt u vi ch s 0, do phn t u tin ca mng @mang1 l $mang1[0], v n c gi tr 1 nh trn. Ch :

Cn phn bit gia $mang1 v $mang1[0]


$mang1 : bin v hng $mang1[0] : phn t u tin ca mng @mang1

C th gn mt bin mng cho mt bin mng khc.V d:


@mang2 = @mang1; Sau khi gn cc phn t ca mng @mang2 ging ht cc phn t ca mng @mang1. Tc l $mang2[0] = $mang1[0], $mang2[1] = $mang1[1], ... C th dng mng trong danh sch : @mang2 = (a, @mang1, c);

Lnh gn trn c ngha l gn danh sch (a, 1, 2, 3 , c) cho mng @mang2( mng @mang1 theo trn gm c cc phn t 1, 2, 3)

Perl cn cho php gn mt mng cho mt danh sch cc bin ($x, $y, $z) = @mang1; tng ng vi : $x = $mang1[0]; $y = $mang1[1]; $z = $mang1[2]; Nu s cc bin nhiu hn s cc phn t ca mng th cc bin cui cng c gn bng xu rng . V d: ($x, $y, $z, $t) = @mang1; $t s dc gn bng xu rng.

Perl cho php truy nhp ti nhiu phn t ca mng cng mt lc <tn_mng>[<ch_s_1>, <ch_s_2>, ... <ch_s_n>] V d: @mang_con1 = @mang1[0, 1]; @mang_con1 gm hai phn t u tin ca mng @mang1. @mang_con2 = @mang1[1, 2, 3]; @mang_con2 gm ba phn t 2, 3, 4 ca mng @mang1. @mang_con3 = @mang1[0..9]; @mang_con3 gm 10 phn t u tin ca mng @mang1. @mang2[0, 1, 2] = (9, 8, 7); ba phn t u tin ca mng @mang2 c gn bng 9, 8, 7. @mang2[3..6] = (9, 8, 7); tng ng vi: $mang2[3] = 9; $mang2[4] = 8; $mang2[5] = 7; $mang2[6] = ;

Perl cung cp mt cch n gin hon i hai phn t ca mng. V d mun hon i hai phn t u tin ca mng @mang1 ch cn dng cu lnh sau: @mang1[0, 1] = @mang1[1, 0]; V Perl lu @mang1[1, 0] vo mt v tr tm thi trc khi gn, do s hon i din ra thnh cng.

2.4 Sp xp mng
$n = @mang;
for ($i=0; $i<$n-1; $i++) for ($j=$i+1; $j<$n; $j++) if ($mang[$i] > $mang[j]) @mang[$i, $j] = @mang[$j, $i];

2.5 S phn t ca mng


Nu mt bin v hng c gn bng tn ca mng th bin cha gi tr l s phn t ca mng : $sopt = @mang1; # $sopt nhn gi tr l 3 l s phn t ca mng @mang1 Ch : Hai cu lnh sau l khng tng ng $so = @mang1; # S phn t ca mng @mang1 gn cho $so. ($so) = @mang1; # Phn t u tin ca mng @mang1 gn cho $so. cu lnh th hai ($so) c coi l mt danh sch ch c duy nht mt phn t $so.

2.6 In ra cc phn t ca bng


Mun in ra ton b phn t ca mng @mang1 trn ta dng lnh: print (@mang1); Kt qu in ra s l : 123 c khong trng gia cc phn t d c hn ta phi a bin mng vo trong xu : print (@mang1); Kt qu in ra : 123

2.7 Mt s hm cho mng


a. b. c. d. e. f. g. h. Hm SORT Hm REVERSE Hm CHOP Hm JOIN Hm SPLIT Hm SPLICE Hm SHIFT & UNSHIFT Hm PUSH & POP

a.

Hm SORT

Hm ny sp xp cc phn t ca mng theo th t alphabetical v tr li gi tr l mt danh sch c sp xp. Do ta c th dng php gn : @mang1 = (de, bc, fg, a); @mang_sx = sort (@mang1); Kt qu tr li l @mang_sx Gm c cc phn t ca mng @mang1, nhng c sp xp. Do @mang_sx l danh sch (a, bc, de, fg). Mun mng @mang1 c sp xp, ta dng lnh: @mang1 = sort (@mang1);

Tc l gi tr tr li sau khi sp xp @mang1 c gn chnh vo @mang1 Ch : hm sort ch sp xp c xu, khng sp xp c s theo th t tng dn. Do on m sau s khng thc hin c iu ta mong mun sp xp cc s theo th t : @mang1 = (111, 33, 222); @mang1 = sort (@mang1); Bi v khi thc hin hm sort 111, 33, 222 c hiu nh l nhng xu. Cho nn kt qu: @mang1 l danh sch (111, 222, 33)

b.

Hm REVERSE

Hm ny o ngc cc phn t ca danh sch hay mng, v gi tr tr li l danh sch c o ngc. @mang1 = (de, bc, fg, a); @mang2 = reverse (@mang1); Gi tr c gn cho mng @mang2 l danh sch (a, fg, bc, de) Cng nh trn gi tr ca mng @mang1 khng thay i, mun c mng @mang1 sp xp ta dng: @mang1 = reverse (@mang1);

c.

Hm CHOP

Hm ny ct b k t cui cng ca mi phn t trong mng : @mang1 = (abc, def, ghi); chop(@mang1); Danh sch c lu tr trong mng @mang1 sau khi thc hin hm chop l: (ab, de, gh);

d.

Hm JOIN

Hm ny ghp tt c cc xu trong danh sch hay mng tr thnh mt xu: $string = join( , Day, la, xau); Phn t u tin ca danh sch c coi l phn t ngn cch gia cc phn t cn li ca danh sch trong xu c ghp. Do vy: $string = Day la xau;

e.

Hm SPLIT

Ngc vi join hm split tch mt xu ra thnh


nhng xu con v gi tr tr li l mt danh sch. Cc xu con tch nh vo du hiu phn cch. $string = Day::la::xau; @mang1 = split(/::/, $string);

f.

Hm SPLICE

Hm splice cho php bn chnh sa danh sch lu tr trong mng nh thm phn t vo gia mng, xo phn t hay thay th mt phn t. Thay i gi tr ca phn t Thay i gi tr ca phn t th hai v ba ca mng @mang1 : @mang1 = (de, bc, fg, a); splice (@mang1, 1, 2, (ij, kl); Nu s phn t thay th nhiu hn s phn t ch nh thay th, cc phn t cn li c chn vo danh sch @mang1 = (de, bc, fg, a); splice (@mang1, 1, (ij, kl); # Li to ra mng
@mang1 ging nh trn.

Tng t nu s phn t thay th t hn th cc phn t ch nh thay th cn li trong danh sch s b loi b @mang1 = (de, bc, fg, a); splice (@mang1, 1, 2, 3, (ij, kl); @mang1 by gi ch cn 3 phn t (de, ij, kl). Thm mt phn t vo mng splice (@mang1, 3, 0, "mn", "pq"); thm hai phn t mn v pq vo mng @mang1, phn t th 4 l mn, phn t th 4 l mn, cc phn t th 4 v 5 ca @mang1 s c y ln thnh phn t th 6 ,7 v tip tc. Xo phn t khi mng splice(@mang1, m, n); Xo n phn t ca mng n bt du t phn t th m. Gi tr tr li l mt danh sch b xo cc phn t ch nh.

g.

Hm SHIFT & UNSHIFT

Hm shift loi b phn t u tin ca mng : $ptdt = shift(@mang1); V d: @bases = ('A', 'C', 'G', 'T'); $base2 = shift @bases; print "Here's an element removed from the beginning: "; print $base2,\n"; print "Here's the remaining array of bases: "; print "@bases"; Kt qu hin th: Here's an element removed from the beginning: A Here's the remaining array of bases: C G T

Ngc li, hm unshift chn thm vo u mng mt phn t: unshift(@mang1, $ptdt); V d: @bases = ('A', 'C', 'G', 'T'); $base1 = pop @bases; unshift (@bases, $base1); print "Here's the element from the end put on the beginning: "; print "@bases\n\n"; Kt qu hin th: Here's the element from the end put on the beginning: T A C G

h.

Hm PUSH & POP

Hm push y mt phn t vo cui mng push(@mang1, $pt); V d: @bases = ('A', 'C', 'G', 'T'); $base2 = shift @bases; push (@bases, $base2); print "Here's the element from the beginning put on the end: "; print "@bases\n"; Kt qu hin th: Here's the element from the beginning put on the end: C G T A

Ngc li hm pop loi b phn t cui cng ca mng pop(mang1); hay: $ptc = pop(mang1); v d: @bases = ('A', 'C', 'G', 'T'); $base1 = pop @bases; print "Here's the element removed from the end: "; print $base1,\n"; print "Here's the remaining array of bases: "; print "@bases"; Kt qu hin th: Here's the element removed from the end: T Here's the remaining array of bases: A C G

3. Kiu d liu mng bm (hash)


3.1 3.2 3.3 3.4 Khi nim Hash Cc thao tc trn mng lin kt Mt s hm trn Hash Lt ct mng bm

3.1. Khi nim Hash


Vi nhng mng nh trn, khi mun truy cp ti 1 phn t ta phi dng ch s l s. iu ny gy ra 1 s kh khn, chng hn ta mun lu tr 1 danh sch cc t.Lc y phi xc nh ch s tng ng vi t no l rt kh khn. Perl nh ngha cho ta 1 kiu mng khc m ta c th truy cp ti tng phn t ca mng nh vo ch s l gi tr v hng bt k. l mng lin kt (associative arrays), i khi cn gi l mng bm (hash array). Tn ca mng lin kt c bt u bng k t %, phn bit vi mng bnh thng bt u bng @. Sau k t % l tn theo quy c %manglk;

3.2 Cc thao tc trn mng lin kt


To mng lin kt
%<tn_mng> = (<ch _s >, <gi_tr >, <ch _s >, <gi_tr >, ...);

hoc
%<tn_mng> = (<ch _s > => <gi_tr >, <ch _s > =><gi_tr >, ...);

V d : %mt = (Pen4, 3, Pen3, 2, Celeron, 5); %ss = (Tin4 => 50, Tin5 => 48, Tin6 => 49); C th to mng lin kt t mng bnh thng v ngc li. V d : @mt = (Pen4, 3, Pen3, 2, Celeron, 5); %mt = @mt; # Vn to ra mng nh trn. @mt2 = %mt; # To ra @mt2 ging @mt To mi mng lin kt bng cch truy cp ti mng bng ch s mi v gn cho n gi tr : $mt{Pen2} = 10;

Xo mt phn t ca mng dng hm delete:Perl loi b cp kho-gi tr khi mng bm V d: %jerry = ("aaa", "bbb", 234.5, 34.56); # cho %jerry 2 phn t delete $jerry{"aaa"}; # %jerry by gi ch cn mt cp kho-gi tr

Vic truy nhp ti mt phn t ca mng lin kt c th thng

qua mt key (ch s) l mt gi tr v hng bt k


C php V d : $manglk{abc} = 1; # to ra kho "abc" vi gi tr 1 $manglk{$cs} = xyz; # to ra kho $cs , gi tr xyz; $<tn_mng> {<ch _s >}

3.3 Mt s hm trn Hash:


a. b. c. d. Hm key Hm value Hm each Hm exits

a. Hm key
key(%manglk) tr v danh sch cc tt c cc kho (ch s) hin

c trong mng bm. Nu khng c phn t no trong mng bm


th keys() tr v mt danh sch rng. V d: $jerry{"aaa"} = "bbb"; $jerry{234.5} = 456.7;

@list = keys(%jerry); # @list = ("aaa", 234.5) hoc (234.5,


"aaa"), trt t ny ta khng kim sot c

V d: mun in tt c cc phn t ca mng lin kt % jerry :

foreach $key (keys %jerry) # duyt qua danh sch cc kho ca


%jerry { print $key:$jerry{$key}; # in kho v gi tr }

v hm key tr li danh sch, cho nn ta c th dng hm sort sp


xp cc ch s ca mng. sort (keys(%manglk))

b. Hm value
Hm ny tr li danh sch cc gi tr ca mng bm

@giatri = value(%manglk)
V d: %lastname = (); # gn %lastname l rng $lastname(jerry} = flintstore; $lastname{tom} = rubble;

@lastname = values(%lastname); # ly cc gi tr
#Ti im ny @lastname cha ("flintstore", "rubble") hoc o ngc ca n

c. Hm each
each(%manglk) ton t ny s tr v cp kho-gi tr nh mt danh sch hai phn t. Vi mi ln thc hin ton t ny cho cng mng, cp kho-gi tr k tip s c tr v, cho ti khi tt c cc phn t u c truy cp. Khi khng cn cp no na th each() tr v mt danh sch rng. Hm ny thng c dng cho vng lp while (($first, $last) = each(% manglk)) { print "First name of $first is $last\n"; } Vic gn mt gi tr mi cho ton b mng s t li tng ton t each() tr v v tr bt u (phn t u tin).

d.

Hm exits

Kim tra xem c tn ti phn t trong danh sch lin


kt exits(@manglk{$key}) tr li gi tr khc 0 nu tm thy phn t c kho $key trong danh sch, bng 0 nu khng tm thy

3.4 Lt ct mng bm
Tng t nh mng danh sch, mng bm c th c 'ct'
thnh tng phn nh-tp hp mt s phn t no ca mng. V d, ta c th to mt mng theo cch sau:

$score{"fred"} = 205;
$score{"barney"} = 195; $score{"dino"} = 30; ta c th vit ngn hn nh sau: ($score{"fred"}, $score{"barney"}, $score{"dino"}) =

(205,195,30);

Thm ch c th vit ngn hn na dng lt ct: @score{"fred", "barney", "dino"} = (205, 195, 30); Ta c th dng lt ct trong xu nhy kp:

@players = ("fred", "barney", "dino");


print "scores are: @score{@players}\n"; Lt ct cng c th c dng ghp mt mng bm con vo mt mng bm khc ln hn.

V d sau, mng bm con c u tin hn: nu c cng mt kho tn ti trong c mng bm con v mng bm ln th gi tr trong mng bm con s c s dng:

%league{keys %score} = value %score;


mng con %score c ghp vo mng ln %league. Bn cng c th lm cch khc : %league = (%league, %score);

II.

Vo/ra tp

1. Khi nim v tp 2. Cc thao tc vi tp


a. b. c. d. e. M tp c tp Ghi tp Truy cp trc tip tp ng tp

3. Kim tra tp

1. Khi nim v tp
Tp tin hay tp d liu l mt tp hp cc d liu c lin quan
vi nhau v c cng mt kiu c nhm li vi nhau thnh mt dy. Chng thng c cha trong mt thit b nh

ngoi ca my tnh (a mm, a cng...) di mt ci tn no


. Do tp tn ti ngay c khi chng trnh kt thc hay mt in.

2. Cc thao tc
a. M tp: C php open (filevar, filename); filevar : l bin tp dng thay th cho tp trong chng trnh Perl. filename : l tn c ng dn y ca tp. Bin filevar c t tn theo khi nim v tn gii thiu trong chng 1. Bin ny khng c k t c bit u nn c th ln ln vi tn bin hay mt s t dnh ring khc. V th ta nn dng ch hoa t tn bin tp . open (DULIEU, c:\perl\eg\readme.txt); filename c Perl hiu l mt xu nhy kp ch r v tr ca tp. V th ta c th lm nh sau : $ten_tep = c:\bootlog.txt;

open (DULIEU, $ten_tep); Ch m tp : c 3 ch m M c : y l ch ngm nh ca Perl. M ghi : ch ny s m tp, xo ni dung ca tp v bt u ghi mi. Cch m : thm k t > vo trc filename open (DULIEU, >c:\perl\eg\readme.txt); M ghi thm vo : c th thm d liu vo tp m m khng xo ni dung ca tp. Cch m : thm >> vo trc filename open (DULIEU, >>c:\perl\eg\readme.txt); M va c, va ghi : khc vi ch ghi thm vo, ch ny cho php ghi ln d liu c, li cn cho php c tp. open (DULIEU, +>c:\perl\eg\readme.txt); Cch m : thm +> vo trc filename

b. c tp
c mt dng: c mt dng t tp c m ta dng lnh c c php nh sau : $line = <filevar>; V d : Chng trnh in ra ni dung ca tp dulieu.inp #!/usr/local/bin/perl if (open(TEP, "dulieu.inp")) { $line = <TEP>; while ($line ne "") { print ($line); $line = <TEP>; } }

Perl cn cho php c ton b tp vo mt mng, mi dng ca tp l mt phn t ca mng : @mang = <TEP>; c 1 k t: $char = getc(filename); c theo s byte: read (filevar, result, length, skipval); sysread (filevar, result, length, skipval); filevar : bin tp. result : bin v hng hay mt phn t ca mng lu kt qu. lentght : di byte cn c. skipval : ch s byte cch qung trc khi c(i s ny khng cn thit). Hm read v sysread cng thc hin vic c nhng sysread thc hin nhanh hn.

V d: c 4 byte t tp c lu trong bin TEP v cho vo bin $x read (TEP, $x, 4); Cch c ny thng c s dng cho tp nh phn, do phi khai bo cch c nh phn. V d : c tp lu tr s nguyn 2 byte #!/usr/local/bin/perl open (TEP, "songuyen.dat"); binmode(TEP); while (read(TEP, $so, 2), !eof(TEP)) { print ("$so\n"); } Hm eof(TEP) trn dng kim tra xem c ht tp cha. Hm ny ging nh trong C tr li gi tr 0 nu cha c ht tp, khc 0 nu c ht tp.

2.3 Ghi tp
C php print filevar (<d liu>); printf filevar (<format>, <argument>);

V d open(INFILE, "dulieu.inp")) || die ("Khong mo duoc file dulieu.inp\n"); open(OUTFILE, ">dulieu.out")) || die ("Khong mo duoc file dulieu.out\n"); } $line = <INFILE>; while ($line ne "") { print OUTFILE ($line); $line = <INFILE>; } Hoc dng hm select thay i tp ra mc nh ri dng print (<d liu>); hay dng write cng vi nh dng d liu ra ghi nh cp ti trong phn Vo/ra ghi theo byte i vi tp nh phn phi dng hm syswrite syswrite (filevar, data, length, skipval); Cc i s nh hm read.

2.4 Truy cp trc tip tp


Trong cc thao tc c trc cc tp lun c c theo kiu tun t, t u n cui tp. c th truy cp n v tr bt k trong tp, Perl cung cp hm seek seek (filevar, distance, relative_to); filevar : bin tp distance : s byte b qua nhy ti v tr mong mun relative_to : c ba gi tr 0 hoc 1 hoc 2 Nu l 0 th bc nhy tnh t u tp, 1 tnh t v tr hin ti v 2 th tnh t to cui tp.

V d : Di chuyn n u file : seek(TEP, 0, 0); Di chuyn tip 10 v tr t v tr hin ti : seek(TEP, 10, 1); Di chuyn li li 10 v tr t v tr hin ti : seek(TEP, -10, 1); Di chuyn n cui file : seek(TEP, 0, 2); Tuy nhin, mt vn t ra l phi kim sot xem v tr truy nhp vo c vt ra ngoi kch thc tp hay khng. trnh gy li, Perl cung cp hm tell xc nh v tr hin ti ca con tr tp. Hm ny tr li khong cch (bng s byte) tnh t u tp n v tr hin ti. C php: tell(filevar) V d : tnh s byte ca tp seek(TEP, 0, 2); # Di chuyn n cui tp $kichthuoc = tell (TEP);

2.5 ng tp
C php close (filevar);

Tuy nhin nu qun khng ng tp li khi x l xong th Perl s lm gip iu . V d open (MYFILE, ">dulieu"); print MYFILE ("Xin chao.\n"); open (MYFILE, ">file2"); print MYFILE ("Xin chaot.\n"); Khi file2 c m ra Perl s t ng ng dulieu li v bin

3. Kim tra tp
Perl c rt nhiu ton t cho ta s dng kim tra cc thuc tnh ca tp. V d nh s dng ton t -e m bo rng tp c tn ti trc khi thao tc. Hay kim tra tp xem c th ghi c khng trc khi vit thm vo. Bng vic kim tra tnh kh thi ca cc thao tc i vi tp, ta c th gim bt s li s gp. C php -x $filevar x : l k t ch biu th ton t kim tra tp. $filevar : l bin v hng cha tn tp. Ton t thng dng nht l ton t kim tra tp c tn ti hay khng e $var = "dulieu "; if (-e $var) { print STDERR ("File dulieu co ton tai.\n"); }

III. Chng trnh con


1. 2. 3. 4. 5. Khi nim Cch gi hm Tr li gi tr cho hm Bin cc b trong hm Truyn tham s cho hm

1.

Khi nim

Chng trnh con l mt on chng trnh nhm thc hin mt cng vic no v c thc thi bng cch gi chng trnh con ra. Mc ch s dng chng trnh con: Chia nh chng trnh thnh nhng phn nh hn, lm cho n d c v d hiu hn. Gip ta trnh phi vit li nhiu ln nhng on chng trnh thc hin mt cng vic ging nhau.

nh ngha chng trnh con : sub <tn> { <cc cu lnh> }


<tn> : gm cc ch ci, ch s v du gch di. <cc cu lnh> : c th c mt hay nhiu cu lnh.

V d v mt chng trnh con:

Chng trnh con trong Perl c th c t bt k u trong

chng trnh chnh. Tuy nhin, s l tt nht nu t chng


trnh con u hoc cui chng trnh chnh. iu ny lm cho chng trnh d c hn. Trong Perl ch c mt loi chng trnh con duy nht l hm, song oi khi tu theo cch s dng m ta c mt CT con

tng ng nh l mt th tc, tc l c th gi n ra m
khng cn gn.

2.

Cch gi hm

Bn gi mt CT con t bn trong bt k biu thc no bng vic ghi ra tn ca CT con v theo sau l danh sch cc tham s c t trong hai du (), nu khng c tham s th ta dng (); <tn> ( <danh sch cc tham s> ) i khi gi hm bng cch ny gy ra li, chng trnh khng hiu , ta cn c cch gi khc nh sau lun ng : &<tn> ( <danh sch cc tham s> hay do <tn> ( < danh sch cc tham s> ) V d:

3.

Tr li gi tr cho hm

L hm th phi c gi tr. Trong Perl gi tr ca hm c tnh bng gi tr ca biu thc cui cng trong hm. VD:

Hm cho_gia_tri s c gi tr bng gi tr ca $x l 123. Nh vy ch cn vit ra bin hay gi tr cui cng trong hm ta nhn c gi tr tr li cho hm chnh l bin hay gi tr . Tuy nhin lm nh vy s lm cho chng trnh rt kh c.

Nn s dng bin mng retval gn gi tr tr li cho hm $retval = $x; @retval = @mang; Tuy nhin biu thc cui cng y l biu thc c tnh trong hm ch khng phi l biu thc cui cng xc inh trong thn hm. VD:

Cng c th tr li gi tr cho hm bng cch dng cu lnh return <gi tr tr v>; Cu lnh return ny hot ng ging ht nh trong C : tr li gi tr cho hm v kt thc hm chuyn v ch gi n. VD:

4.

Bin cc b trong hm

Bin cc b c khai bo trong hm v ch tn ti trong thi gian hm hot ng. Khi ra khi hm bin mt i, khi gi hm mt ln na bin cc b l c nh ngha li. Bin cc b c khai bo nh sau : my <bin>; local <bin> ; Khai bo bng t kho my lm cho bin ch tn ti trong hm . Ra khi ngoi hm th bin khng cn tn ti. Khai bo bng t kho local s lm cho bin tn ti trong hm v c trong nhng hm c n gi. Nhng s khng tn ti trong chng trnh chnh. Cng nh cch khai bo bin ton cc, bin cc b c th c gn gi tr trong khi khai bo

5. Truyn tham s cho hm


Trong Perl khi li gi hm c mt danh sch cc tham s, cc tham s s t ng gn cho mt danh sch vi tn @_. Chng trnh con xc nh gi tr cc tham s bng cch truy cp vo danh sch cc bin ny V d:

Ch : Nu c mt bin v mt mng cng tn th c bin v mng u c hiu lc trong li gi hm. V d:

Ch : Ta cng c th truyn nhiu bin, mng hay danh sch theo cch ny V d:

6.

Hm quy

Hm qui l hm c nh ngha qua chnh n v c xut pht t trng hp c s V d:

7. Ch nh th t sp xp
Ta c hm sort trong Perl s sp xp cc phn t theo th t abc. @list1 = ("Trang", "An", "Nam"); @list2 = sort (@list1); cho ta @list2 = ("An", "Nam", "Trang") sp xp cn phi so snh tng i cp phn t mt. Perl lm iu ny bng cch gi mt hm c bit c xy dng sn tng t nh hm sau :

8. Mt s hm c bit trong Perl


a. b. c. d. e. Hm BEGIN Hm END Hm AUTOLOAD Cc hm ton hc Hm to s ngu nhin : rand, srand

a.

Hm BEGIN

Hm ny s c gi khi chng trnh bt u chy. BEGIN { print Chuong trinh ...\n; } Tt nhin cng nh mi hm khc, hm ny c th c bin cc b hoc c th gi hm khc trong chng trnh.

b.

Hm END

Hm ny c gi khi chng trnh kt thc.


END { print Ket thuc chuong trinh!; }

c. Hm AUTOLOAD
Hm ny s c gi khi c mt li gi hm, m hm ny khng c tm thy trong chng trnh, tn ca hm c lu trong bin AUTOLOAD, danh sch tham s c lu trong @_:

Hm AUTOLOAD rt c ch khi ta lp trnh chia theo nhiu modul, n s kim tra s tn ti ca mt hm no c vit trong file khc khi hm c gi.

d.
Sin Cos Atan2 Sqrt Exp Log abs

Cc hm ton hc

e. Hm to s ngu nhin : rand, srand


hex(hexnum) chuyn i s hexnum h 16 sang h 10. $he10 = hex(ff); # $he10 nhn gi tr 255 oct(octnum) chuyn i s octnum h 8 sang h 10. $he10 = oct(17); # $he10 nhn gi tr 15 int(floatnum) chuyn i s thc floatnum ra s nguyn. $nguyen = int(37.6); # $nguyen nhn gi tr 37 $nguyen = int(37.6 + 0.5); # $nguyen nhn gi tr 38 ord (char) cho gi tr l s th t ca k t char trong bng m ASCII char (num) cho gi tr l k t c s th t l num trong bng m ASCII

IV. Ci t v s dng th vin BioPerl, s dng BioPerl cho bi ton sp cp trnh t v sp a trnh t.

1. 2. 3. 4.

Gii thiu BioPerl Ci t BioPerl S dng BioPerl S dng BioPerl cho bi ton sp cp trnh t a trnh t

1.

Gii thiu BioPerl

a ch web: http://www.bioperl.org

BioPerl l th vin lp trnh c pht trin trn nn Perl vi mc ch chuyn dng cho vic pht trin cc ng dng Tin sinh hc. y l b th vin m ngun m, v ang c xy dng bi rt nhiu chuyn gia trn th gii. BioPerl cho php gii quyt cc bi ton Tin sinh hc. Bioperl l mt b su tp gm hn 500 modul Perl cho tin sinh hc c vit v duy tr bi mt nhm cc tnh nguyn vin quc t Bioperl l mt phn mm min ph

2.

Ci t BioPerl

Bc 1: u tin ci t phn mm Perl: Download v ci t ActivePerl-5.16.1.1601 trn a ch web http://www.activestate.com/activeperl/downloads

Bc 2: Ci t ActivePerl xong, vo StartRung lnh ppm th ca s ca Perl hin ra:

Bc 3: Ci t Bioperl cn thm cc file. File l mt a ch tr n mt my ch m trn cc phn mm c sn. D liu ca Bioperl l:


http://bioperl.org/DIST.

Sau lm nh hnh v:

Bc 4: ng ca s tham chiu li ta tm trong hp tm kim u trang, Bioperl c lit k:

Bc 5: nh du Bioperl ci t

Bc 6: Thc hin vic ci t cc gi c nh du bng cch nhn vo File/v nhn vo nt yu cu ci t

Bc 7: Cui cng, Bioperl c ci t sau mt thi gian, PPM ca bn s ging nh hnh di y:

3.

S dng th vin bioperl

y l mt danh sch ngn ca mt s hu ch ca Bioperl Tng quan v cc i tng Bioperl i tng Seq Tp tin Gbrowse v GFF Phn tch c php BLAST T ng tm kim c s d liu

Bioperl l tp hp nhiu modul. Mt s cc modul c lp, nhng modul khc tng tc vi nhau theo nhiu cch khc nhau. Cc m-un trong Bioperl c vit theo phong cch hng i tng. Cc m-un Bioperl bao gm cc lnh vc khc nhau ca tin sinh hc. Mc d Bioperl bao gm mt s chng trnh v d. N c thc hin nh mt b cng c bn c th nhng vo c tr gip khi vit cc chng trnh ca ring bn.

Mt s cc nhm i tng trong bioperl Sequences <Trnh t> Bio:: Seq l cc dy i tng chnh Bioperl . Bio:: PrimarySeq l mt i tng chui m khng c cc tnh nng. Bio:: SeqIO cung cp trnh t tp tin u vo v u ra. Bio::Tools::SeqStats cung cp cc s liu thng k trong mt trnh t. Bio: LiveSeq:: * x l vic thay i trnh t .

Bio::Seq::LargeSeq cung cp h tr cho chui ln Databases <C s d liu> Bio:: DB:: GenBank cng c truy cp GenBank. Ging Cc m-un c sn trong cc c s d liu sinh hc. Bio:: Index:: * lp ch s v truy cp c s d liu c th Bio::Tools::Run::StandAloneBlast chy BLAST trn my tnh c th. Bio::Tools::Run::RemoteBlast chy BLAST t xa.

Bio::Tools::BPlite phn tch bo co BLAST.Bio::Tools::BPpsilite phn tch bo co psiblast. Bio::Tools::HMMER::Results phn tch kt qu m hnh HMMER n Markov. Alignments <S sp xp > Bio:: SimpleAlign thao tc v hin th s sp xp nhiu trnh t n gin. Bio:: UnivAln thao tc v hin th s sp xp nhiu th t. Bio:: LocatableSeq trnh t cc i tng vi cc im bt u v kt thc c v tr i xng so vi cc trnh t hoc s sp xp khc.

Bio::Tools::pSW ging hai chui vi nhau bng thut ton Smith-Waterman. Bio::Tools::BPbl2seq cng c phn tch c php BLAST cho cp trnh t bng cch s dng cc thut ton BLAST. Bio::AlignIO ging hai chui vi BLAST. Bio:: Clustalw l mt giao din gi Clustalw sp xp a trnh t. Bio:: TCoffee l mt giao din gi TCoffee sp xp a trnh t. Bio::Variation::Allele b x l alen . Bio::Variation::SeqDiff x l b t bin v cc bin th.

Features and genes on sequences Bio:: SeqFeature l thuc tnh th t ca i tng trong Bioperl. Bio::Tools::RestrictionEnzyme nh v cc trang web hn ch theo th t. Bio::Tools::Sigcleave tm thy cc trang web chuyn i axit amin . Bio::Tools::OddCodes vit li cc chui axit amin t m vit tt phn tch thng k c th Bio:: LocationI cung cp mt giao din thng tin v tr cho mt chui

Bio::Tools::Genscan l mt giao din chng trnh tm kim cc gen. Bio::Tools::Sim4::Results l mt giao din chng trnh tm kim cc exon gen. Bio:: Tools :: ESTScan l mt giao din chng trnh tm kim cc gen Bio:: Tools :: MZEF l mt giao din chng trnh tm kim cc gen. Bio:: Tools :: Grail l mt giao din chng trnh tm kim cc gen. Bio:: Tools:: Genemark l mt giao din cc gen tm kim chng trnh.

4. S dng BioPerl cho bi ton sp cp trnh t v a trnh t


Sp cp trnh t vi Blast bng cch s dng bl2seq v AlignIO Ging nh thut ton Smith-Waterman, hai chui cng c th c sp xp trong Bioperl bng cch s dng ty chn bl2seq ca Blast trong i tng StandAloneBlast. a ra c trnh t sp xp - trong 1 dng ca mt i tng SimpleAlign - s dng bl2seq, cn phi phn tch bo co bl2seq vi file nh dng Bio:: AlignIO nh sau:

$factory = Bio::Tools::Run::StandAloneBlast-> new('outfile' => 'bl2seq.out'); $bl2seq_report = $factory->bl2seq($seq1, $seq2); # Use AlignIO.pm to create a SimpleAlign object from the bl2seq report $str = Bio::AlignIO->new(-file => 'bl2seq.out', -format => 'bl2seq'); $aln = $str->next_aln();

Bioperl h tr cc cng c cho vic so snh nhiu trnh t: Clustalw.pm, TCoffee.pm Bioperl cung cp mt giao din chun perl Clustalw TCoffee l mt chng trnh mi c a ra gn y bt ngun t Clustalw

Sp a trnh t
s dng 2 cng c ny cn phi ci t trn h thng my ch. Ngoi ra cc bin mi trng CLUSTALDIR v TCOFFEDIR cn phi c thit lp cc th mc c cha cc thc thi cn phi g cc cu lnh ti v ci t chng trnh C php CLUSTALDIR : the Bio::Tools::Run::Alignment::Clustalw manpage C php TCOFFEDIR: the Bio::Tools::Run::Alignment::TCoffee manpage

V c php 2 cu lnh trn l ging ht nhau ch khc nhau duy nht tn cc modul xut hin ban u Cn lu i vi mt s thng s ca ClustalW v TCoffee khng c thc hin trong giao din Perl Sau khi cc thng s c thit lp ngi ta c th gi cc phng php sp xp sp xp mt cp cc trnh t unaligned hoc profile_align thm mt hoc nhiu trnh t

sp mt cp trnh t ta thc hin c php sau vi Clustalw use Bio::Tools::Run::Alignment::Clustalw; @params = ('ktuple' => 2, 'matrix'=>'BLOSUM'); $factory = Bio::Tools::Run::Alignment::Clustalw ->new(@params); $ktuple = 3; $factory->ktuple($ktuple); # change the parameter before executing $seq_array_ref = \@seq_array; # where @seq_array is an array of Bio::Seq objects $aln = $factory->align($seq_array_ref);

Ti liu tham kho:


Ngn ng lp trnh Perl cho ngi mi hc Bin dch: TS

L Minh Trung, Quc Bnh NXB Thng K 2002


BioPerlTutorial - a tutorial for bioperl Written by Peter Schattner schattner@alum.mit.edu

http://docstore.mik.ua/orelly/perl/
http://perldoc.perl.org/perlintro.html http://www.perl.com/language/faq/ http://etutorials.org/Programming/perl+bioinformatics

You might also like