(2010-Feb-09)[JaPh] Perl - The 1st Step

download (2010-Feb-09)[JaPh] Perl - The 1st Step

of 66

Transcript of (2010-Feb-09)[JaPh] Perl - The 1st Step

PERL FOR VIETNAMESE COMMUNITY

Perl The 1 StepHng dn lp trnh Perl c bn[JaPh] 2/9/2009

st

The book is written by [JaPh] with a quick guide and introduction on how to start programming computer language with Perl in an easy way.

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

Page 2

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

MC LCChuyn mc MC LC A. Gii thiu v Perl v tc gi 1. Perl l g? 2. ng dng Perl 3. Cn g lp trnh Perl? 4. Lp trnh Perl kh hay d? 5. i iu v tc gi 6. Quy c v k hiu trong sch B. Kiu d liu I. Kiu s 1. S nguyn 2. S thc 3. Ton t kiu s II. Kiu chui 1. Lu tr 2. K t c bit 3. Ton t kiu chui C. Bin 1. Scalar 2. List 3. Hash D. Cu trc chng trnh Perl E. Ton t v u tin 1. T tng gim 2. Quan h 3. So snh ngang bng 4. Ton t vi bit (bitwise) 5. iu kin F. Cu trc iu kin 1. R nhnh IF 2. R nhnh UNLESS Trang

Page 3

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

G. Nhp xut 1. Chun Input 2. i s chng trnh 3. Ton t kim cng 4. Cc ngun khc H. Cu trc vng lp 1. Cu trc WHILE 2. Cu trc UNTIL 3. Cu trc FOR 4. Cu trc FOREACH 5. Nhn v iu khin I. Tng tc vi file J. Hm K. Phong cch Comment 1. Comment mt dng 2. Comment nhiu dng vi perl script.pl

Vi Linux bn m bash shell hay bt k loi terminal no v chy perl.

$ perl script.pl

4. C kh lp trnh perl? Cng nh mi mn khoa hc, bn cn phi t rn luyn k nng v t duy trong lp trnh. c bit, phi lun dnh thi gian thng xuyn tp luyn hay n li k nng lp trnh. Khng c vic g

Page 8

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009kh, cho d bn l ngi quen vi lp trnh hay l ngi hon ton mi vi ngn ng my tnh, ch cn bn thc s dn cng sc vo l mi vic tt s c v thnh cng. 5. V tc gi cun sch ny Vn l nhng ngi yu thch lp trnh Perl, bvKim v [JaPh] vi mong mun mang v t nc Vit nam, nn cng ngh thng tin vi ngn ng lp trnh cn c gi l c bit khng nhiu Vit Nam. V mc ch phc v cng ng v m rng nn cng ngh thng tin Vit nam, chng ti hi vng cun sch nh ny s ng gp mt phn no v em n cho ngi c nim hng th vi mt ngn ng lp trnh kh mi m ny mc d vi th gii th khng c g l mi cho lm. Cun sch hin cn trong qu trnh c hon thin nn s c rt nhiu sai st nn rt mong cc bn ng gp gip chng ti hon thin cun sch ny mt cch cn thn v y . Bn c c th lin h vi tc gi qua email: [email protected] 6. Quy c trong sch

Mu nu (Dark Red): l cu lnh thc thi chng trnh Perl. Mu (Red): l nh ngha hay cch s dng mt hm hay mt cu trc lnh.

y l iu quan trng cn ghi nh:

vi s ln, c nhiu ch s, bn c th s dng du gch chn (underscore) _ ni cc ch s vi nhau

y l khung cha ni dung m ngun perl:

#! /usr/sbin/perl -w # Chng trnh in ra dng ch "Hello World" print "Hello World!\n";

Page 9

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

Page 10

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009B. Kiu d liu (Data Type)

I. D liu kiu s: (Number) C 2 kiu s c s dng trong Perl: s nguyn (integer) v s thc (floating-point). 1. Kiu s nguyn Nhng s c biu din nh sau mang tnh cht s nguyn trong Perl: 0 1982 -9999 23487682304 034234 Tuy nhin, trong Perl c mt kiu vit s nguyn hi c bit mt cht; l vi s ln, c nhiu ch s, bn c th s dng du gch chn (underscore) _ ni cc ch s vi nhau v Perl vn c th hiu l kiu s nguyn. V d s di y: 1_333 -23_1 2_034_22_234_96 Nhng s trn u l s nguyn hp l theo nguyn tc. y l im khc so vi nhiu ngn ng lp trnh khc. (*) Trong Perl, c 4 h m c s c bn: h nh phn (binary-2),h bt phn (octal-8), h thp phn (decimal-10) v h thp lc (hexadecimal-16). Quy tc biu din s nguyn trong perl di cc h m ny nh sau: + nh phn: thm 0b trc con s. V d: 0b101, 0b1111, 0B00110101.. + bt phn: thm s 0 trc con s. V d: 037, 01111, 09876. + thp phn: nhng kiu vit bnh thng khc 3 h m kia. V d: 1234, 590283. + thp lc phn: thm 0x u. V d: 0xFF, 0x34AABCE0. Ghi ch: vic nhn dng chun cc h m ny cn ph thuc vo cch bn x l kiu d liu trong chng trnh. V th bn cha cn quan tm lm v vn y. 2. Kiu s thc (floating-point) L nhng con s c du chm dng trong cch th hin. V d nhng con s di y l s thc c dng trong Perl: 0.00 vi s ln, c nhiu ch s, bn c th s dng du gch chn (underscore) _ ni cc ch s vi nhau

Page 11

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009-3.0085 7.25E3 -1.8e19 -2009.12e-21 Ghi ch: k t e vi ngha c s m ca 10. 3. Cc ton t vi d liu kiu s Perl cung cp 6 ton t c bn tnh ton vi d liu kiu s. a. Ton t cng (addition operation) 3+2 1.01 + 7.2 -2.3e-38 + 1.04 b. Ton t tr (subtraction operation) 1.01 - 43 1.02 4e11 c. Ton t nhn (multiply operation) 45 * 2.1 99.1 * 0.1e22 d. Ton t chia (division operation) 5.3 / 2 1 / 9e-17 e. Ton t thng d (modulus operation) 5%8 6.3 % 1.02e3 f. Ton t nhn bi (exponential operation) 2 ** 3 (=8) 1 ** 100 (=1) II. D liu kiu chui (Strings) 1. Lu tr Trong perl, kiu chui hp l gm cc k t chun trong bng m ASCII 32 (k t, k t, k t c bit, k t iu khin, k s) lu tr d liu kiu chui Perl gi gi tr ca chng bng 2 cch. + D liu lu trong cp du phy n k t e vi ngha c s m ca 10.

Page 12

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009+ D liu lu trong cp du phy kp V c bn th ging nhau, ch c mt im khc bit y l i khi trong chui vit, ting anh cng c kiu vit c du phy. V d nh: dont, lets, theres V th gi s c mt cu ting anh th ny: Lets program in perl because its so easy. Nu lu trong cp du ngoc n: s c: Lets program in perl because its so easy. R rng l c vn v chui b kt thc ngay sau ch t u tin do chui quy c trong cp du phy n. y c 2 cch x l: + c th s dng du backslash \ quy nh du cha phi l du kt thc quy c chui. Nn cu s tr thnh: Let\s program in perl because du backslash \ quy nh du cha phi l du kt thc it\s so easy. + c th s dng cp du phy kp thay th: Lets program in perl because its so easy. Bi v chui nhn dng qua cp du phy kp cho nn du phy n s dng hon ton hp l. Tuy nhin trong trng hp m trong chui cng xy ra du phy kp khng nh mong mun th ta li s dng du backslash lm chun chui. 2. K t c bit Trong perl c mt s cc k t c gi l c bit khi c truy xut trong chui qua k t backslash \ y l danh sch cc k t : K hiu \n \r \t \f \b \a \003 \0x7f \cA \\ \e \ \l \L \u \U \Q ngha newline Return Tab Formfeed backspace Ring a bell Hin th char qua octal Hin th char qua hex Cp iu khin (Ctrl + A) Du backslash Escape Du phy kp K t tip theo s l k t in thng Tt c k t ng sau in thng, dng khi gp \E K t tip theo s l k t in hoa Tt c k t ng sau in hoa, dng khi gp \E Thm du \ cho tt c cc k t tip theo du \, dng khi gp \E

Page 13

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009\E 3. Ton t vi chui a. Ni chui (concatenation) Dng du chm gia 2 chui (ging PHP) V d: bvKim . -.[JaPh] s to chui mi l: bvKim-[JaPh] programming .perl.\n s to chui mi: programming perl\n b. Lp chui (repetition) S dng k t x lp chui s ln cho trc. V d: bvKim x 2 s thnh bvKimbvKim 1982 x 3 s thnh 198219821982 2009 x 2 s thnh 20092009 ch khng phi l 4018 nh :D X l kt thc \L, \U v \Q

Page 14

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

Page 15

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009C. Bin lu tr (variable)

Trong perl, c 3 kiu bin s lu tr d liu. l: scalar, list v hash 1. Scalar: Scalar l bin ch lu tr ng 1 gi tr; gi tr lu tr c th l bt c kiu d liu no, s nguyn, s thc hay chui u hp l. Scalar c nhn dng vi k t $ u v chui tn ca scalar. V d: $bvkim, $perl

Quy tc t tn cho bin trong Perl kh thoi mi, tn ca bin kiu scalar c th cha ch ci, ch s v du gch chn. Ch : bt buc tn bin scalar phi bt u vi ch ci, v phn bit ch hoa, ch thng. Cc v d sau l hp l: $kimmy, $kim01, $kimmy_007bv, $KiMmY0_1a2A, $KIM123, $kim123 Cc v d sau l khng hp l: $_123abc, $1982kim, $#$@_very_crazy123_scalar... Gn gi tr cho scalar: s dng du = (right-to-left) V d: $kimmy = 1982, $bvkim = handsome; $kim82 = yo! Kool 82x; Vi ton t: $range = $max $min + 1; $age = 1990 - $min $name = bv . kim, $job = $teacher . perl; $res = 5 * ($a - $b * $ c) Cc kiu gn rt gn (binary assignment) $res = $res + 1 thnh $res += 1 $res2 = $res2 1 thnh $res2 -= 1 $res3 = $res3 * 3 thnh $res3 *= 3 $res4 = $res4 / 4 thnh $res4 /= 4 $res5 = $res5 . string thnh $res .= string coi list l mt kiu bin 2. List List l mt kiu danh sch hay tng ng vi mng trong vic lu tr nhiu gi tr scalar ch trong mt bin kiu list. Khc vi nhiu ngn ng khc, Perl trong bin kiu list. Tc l s c cc operation truy xut v s dng cc phn t ca list mt cch gn nht. v c tch hp sn tnh cht ca kiu cu trc d liu stack LIFO

Page 16

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009Bin kiu list c nhn dng bng du @ trc cng vi quy cch t tn tng ng vi bin kiu scalar. Mt s v d v list cng cc kiu khi to khai bo gi tr trong list: Cc gi tr khi to phn cch bng space Cc gi tr khi to bng cch c in nht Cc gi tr khi to lng ghp nhau

@author = qw(kimmy pete); @c0d3r_123 = (kimmy, pete, 1982);

@list01 = @list02 @nested_List = qw(@author nobody) @nested_List_ex = (@c0d3r_123, (perl, 1980), 1, codebreak); Khi to cha gi tr scalar

$scalar_var = 1888 @list_new = qw(123 2 33 $scalar_var) Khi to c range

@list1 = (1, 2 , 3) @list2 = (1..3) @list1 v @list2 tng ng nhau @list3 = (0, 4..7, 100, 200..203) Tng ng vi @list4 = (0, 4, 5, 6, 7, 100, 200, 201, 202, 203)

-

Thm mt ch na vi cch s dng qw khi to gi tr cho list l bn c th s dng bt c cp du no cng c v d: @name = qw(kimmy pete) @name = qw{kimmy pete} @name = qw[kimmy pete] @name = qw! Kimmy pete ! @name = qw# kimmy pete # s dng qw khi to gi tr cho list l bn c th s dng bt c cp du no cng c

Cc phng thc tng tc vi list

Page 17

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

a. Trch xut phn t trong list: @names = qw# kimmy pete somebody # $names[index] s l phn t th index nm trong list Vy th $names[0] s c gi tr l kimmy $name[1] s c gi tr l pete - Mt im hay trong Perl l c th trch xut ngc, tc l tn ti v tr -1, -2 tc l s m th t t phn t cui v phn t u. Nh vy th, $names[-1] s c gi tr l somebody $names[-2] s c gi tr l pete $names[0] lun l gi tr u tin kimmy b. Cc phng thc s dng trn list * push LIST, ELEMENT Hm push s thm vo LIST mt phn t ELEMENT theo kiu STACK tc l LIFO (Last In First Out), ngha l phn t ny th t ng trn nh ca stack. V d: @list = (1..10) push (@list, 11) s tng kch thc ca @list ln 1 v thm vo 1 phn t l 11 nh stack. Bn c th push vo nguyn c mt list cng c, khng c g phi l mt element. @list_1 = (1..10); @list_2 = qw(100.111) push(@list_2, @list_1); * pop LIST Hm pop s tr v phn t trn nh ca stack LIST v gim kch thc ca list i 1 phn t. V d: @list = (1..10) $res = pop(@list); => $res c gi tr l 10 * shift LIST Hm shift tng t nh pop nhng thc hin v y ca stack, tc l y phn t pha bn tri ca LIST ra ln lt V d: @list = (1..10) $res = shift(@list); => $res c gi tr 1 $res2 = shift(@list) => $res2 c gi tr l 2, v 1 b y ra trn. * unshift LIST, ELEMENT c th trch xut ngc, tc l tn ti v tr -1, 2 tc l s m th t t phn t cui v phn t u

Page 18

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009Hm unshift tng t nh push nhng li thc hin t y, tc l phn t no vo trc th s cng b dn ln nh ca stack (tng ng vi QUEUE FIFO First In First Out) V d: @list = (5); unshift(@list, 11); => @list c gi tr ln lt l (11 5) * sort LIST Hm sort s sp xp cc phn t trong LIST theo th t quy c trong sort. Theo mc nh s sp xp theo th t bng ch ci (ascending). V d: @list = qw(h f q) Sort(@list); => @list s c th t l qw(f h q) Hm sort s c s dng linh ng hn vi kiu sp xp c quy tc, nhng mnh khng cp y trnh phc tp ha. * reverse LIST Hm reverse s xoay ngc th t cc phn t trong LIST. V d: @list = (1..4) Reverse(@list); => s cho kt qu l (4..1) 3. Hash Hash c bit l mt kiu cu trc d liu lin kt bi mt kha tr ti gi tr ring ca n. Cc kha ny thng c nhn bit di dng cc chui ring bit (string). cho n gin cng xem th v d v mt cun sch. Trong mt cun sch n c mang nhiu c im v d nh l tn sch, tc gi, nm xut bn, nh xut bn, ln ti bn, m s schV d cun sch Tam Quc Ch c kha tn l Tam Quc Ch, tc gi l La Qun Trung, nh xut bn l Kim ngC mi kha ta li c mt gi tr mang c tnh m n lu tr. Cc hash trong Perl c nhn dng vi k t % u. Cch t tn hash ging vi quy tc t tn vi scalar. V d: %book, %host, %SERVER_A Cch khi to gi tr cho hash o To theo kiu list %book = { book , Tam Quoc Chi, author, La Quan Trung }; Theo phong cch khi to ca list th c mt gi tr key s k tip mt gi tr ca n. Tc l kha book c gi tr Tam Quoc Chi v Tam Quoc Chi khng phi l kha. o To kiu hash c trng %book = { book => Tam Quoc Chi, author => La Quan Trung } Nhn theo kiu khi to ny rt d dng c th thy v phn bit key v value r rng. n gin ha vic khi to key, trnh g ci cp du hay , bn c th s dng du %book = { -book => Tam Quoc Chi, -author => La Quan Trung }

Page 19

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009Cch gn v s dng gi tr trong hash o Mi gi tr trong hash thc cht l mt scalar nn phi s dng k t $ , $book{author} = $book{author} = $book{-author} = $book{author} = La Quan Trung. Cc hm s dng tng tc vi hash o sort HASH sp xp hash theo quy tc (mc inh l theo bng ch ci) V d sp xp hash theo key: sort keys %hash o Thm mt phn t mi vo hash Ch cn gn gi tr nh bnh thng vi key mi. $book{-nxb} = Kim Dong o delete $hash{key} Xa mt kha v gi tr ca n trong hash delete $book{-author} o reverse %hash Hm ny tc dng c bit, xoay ngc gi tr key v value. V d: %hash_x = reverse %hash Th %hash_x = { Tam Quoc Chi => book, La Quan Trung => author } o keys %hash Tr v mt list cc keys ca hash o values %hash Tr v list cc values ca hash

Page 20

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

Page 21

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009D. Cu trc mt chng trnh Perl

Kin thc bit nh trn nhiu ri, by gi phi i vo code th mt t cho n sng khoi u c chn tay. Nh mun ngn cc ngn ng lp trnh khc chng ta bt u bng bi c in Hello World

#! /usr/sbin/perl -w # Chng trnh in ra dng ch "Hello World" print "Hello World!\n";Theo nh nhng g c miu t trn bn c th thy c cch comment trong source perl. Dng 1: y l dng c bit, thng c dng t ch th khai bo cch thc kiu ng gi, truyn vo b dch source ca perl. Nu bn lp trnh CGI th dng ny c bit cn thit v phi thit lp chnh xc ng dn v v tr ca perl CGI script hot ng chnh xc; nu khng s sinh ra li thng thy CGI script (500: Internal Server Error). Nu khng lp trnh CGI th bn khng cn quan trng v ch th y. /usr/sbin/perl: y l ng dn ca perl trong my ca mnh, s dng trn mi trng Linux; my ca cc bn thit lp c th khc (c th l Windows) -w : i s vo trnh dch cho bit dch source ch warning, tc l nu source c nhng on no code cn ch th trnh dch s thng bo mnh ch . C nhiu i s trong perl, cc bn c th t tm hiu thm :D. Dng 2: dng 1 thc cht l comment, tc l vi du # trc, tt c nhng g trn dng v ng sau du # u c trnh dch b qua. Tng t, Perl cung cp kiu comment theo C-style, comment 1 dng dng //. Dng 3: hm printf() c dng in mt chui ra mn hnh. Nh bn c th thy Hello World l mt chui. K t c bit \n cho php xc nh s chuyn n dng mi ngay sau khi in ra chui. V cch s dng hm v tham s trong Perl, kh thoi mi, c hm bn phi s dng cp du () t tham s vo trong, c hm th khng cn thit cho lm. V d nh hm printf() trn, l ra l phi t chui trong cp du (). Tc l: printf(Hello World \n); Nhng hm ny c thit k rt thoi mi v c nhiu hm khc trong perl cng thoi mi th ny y. V d mt s hm cc bn bit nh: sort, reverse

Cng nhau khm ph source na hiu r hn v cch s dng cc kiu bin

Page 22

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009 #! /usr/sbin/perl w use strict; # to mt hash mi my %author = ( Name => "Kimmy", Gender => "Male", Age => 28); # ly gi tr Name my $author_name = $author{Name}; print "Author Name : " . $author_name . "\n"; # ly gi tr Age my $author_age = $author{Age}; print "Author Age: " . $author_age . "\n"; # ly danh sch cc keys trong hash my @list_keys = keys %author; print "Cac keys trong %author: " . $list_keys[0] . " " . $list_keys[1] . " " . $list_keys[2] . "\n"; # xa i kha Age v gi tr tng ng delete($author{Age}); # to mt hash mi vi d liu ly hash ban u my %author_new = %author; # ly danh sch cc values trong hash mi my @list_vals = values %author_new; print "Cac Values moi: " . $list_vals[0]. " " . $list_vals[1]. "\n";

C l mnh khng cn gii thch g nhiu v on code trn v comment ca mnh gii thch ht ri ^^. Cc bn cn nm vng kin thc c bn c th p dng vo thc t. T by gi, s i vo cc kin thc chnh ca perl nh khi lnh iu kin, vng lp, cu trc d liu,

Page 23

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

Page 24

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009E. Cc ton t v u tin ton t

u tin ton t v kt hp trong Perl c th hin qua bng sau:

left left nonassoc right right left left left left nonassoc nonassoc nonassoc left left left left nonassoc right right left nonassoc right left left

terms and list operators (leftward) -> ++ -** ! ~ \ and unary + and =~ !~ * / % x + - . > named unary operators < > = lt gt le ge == != eq ne cmp ~~ & | ^ && || // .. ... ?: = += -= *= etc. , => list operators (rightward) not and or xor

Cng nhau tm hiu mt s ton t hay s dng. 1. T tng T gim (auto-increment auto-decrement) L 2 ton t c k tha t C, ++, --. Hai ton t ny c 2 cch s dng v gi tr ca n ph thuc cch s dng ca lp trnh vin. V d:

Page 25

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009#! /usr/bin/perl w

use strict; my $i, $j; $i = $j = 100; # S dng tin t $a = 1 + ++$i; # $a = 102 printf $a . "\n"; # S dng hu t $b = 1 + $j++; # $b = 101 printf $b . "\n";Trong $a, gi tr ca $i c nh gi nh sau: + Tng gi tr ca $i ln 1 n v ( $i += 1); lc ny gi tr ca $i = 101 + Sau ly gi tr mi ca $i tnh vo biu thc; tc l, $a = 1 + 101 = 102 Trong $b, gi tr li c tnh nh sau: + Ly gi tr ca $j tnh vo biu thc, $j = 101; tc l $b = 1 + 100 = 101 + Sau tng gi tr ca $j ln mt n v ($j += 1); lc ny gi tr ca $j == 101 Qua , bn c th thy s khc bit trong nh gi ton t v ng dng. Tng t vi ++, -- mang cng mt tnh cht. 2. Ton t quan h (Relational) Chia lm hai nhm: a. Nhm quan h logic s: Bao gm: = < : s bn tri nh hn s bn phi : s bn tri ln hn s bn phi >= : s bn tri ln hn hoc bng s bn phi. b. Nhm quan h logic chui: Bao gm: lt , gt, le, ge lt : chui bn tri nh gi nh hn chui bn phi gt : chui bn tri nh gi ln hn chui bn phi

Page 26

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009le : chui bn tri nh gi nh hn hoc bng chui bn phi ge : chui bn tri nh gi ln hn hoc bng chui bn phi Ch : trong cch so snh nh gi chui, ln lt cc ch ci ca 2 chui s c so snh theo th t trong bng m ASCII. V d: car v apple Chc chn kt qu ca : car gt apple s l true (gi tr ng) bi v Ch ci c > a trong theo gi tr s tng ng trong bng m ASCII 3. Ton t so snh ngang bng (Equality) Bao gm cc ton t: ==, !=, ===, , eq, ne, cmp, --==: s bn tri bng s bn phi !=: s bn tri khc s bn phi : tr v 3 gi tr -1, 0, 1 ph thuc vo s bn tri nh hn, bng, hoc ln hn s bn phi eq : chui bn tri bng chui bn phi (tng ng) ne : chui bn tri khc chui bn phi cmp: tr v 3 gi tr -1, 0, 1 ph thuc vo chui bn tri nh hn, bng hoc ln hn chui bn phi (tng i) --- : ton t c bit, khng cp y. 4. Ton t trn bit (bitwise) Bao gm cc ton t: AND, OR, XOR, AND (&): tr v cc bit AND. V d: 11 & 10 = 10 OR (|): tr v cc bit OR: v d: 11 & 10 = 11 XOR (^): tr v cc bit XOR: V d: 11 & 10 = 01 > 2 = 0010 (dch phi 2 bit) 5. Ton t logic iu kin (logical condition) Bao gm cc kiu ton t trn v: &&, ||, cp ton t ? :

Page 27

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009?: : cp ton t iu kin ny nh gi tiu chun theo iu kin cho trc, ging trong C. V d: $a = ( 1 > 2 ) ? ok : not ok y $a s c gi tr l not ok. Biu thc s kim tra gi tr ca (1 > 2) l true hay false sau s gn gi tr cho $a ph thuc vo kt qu cho trc. Biu thc chung cho cp ton t ?:

[assignment=] (conditional statement) ? (if true) : (if false)Ton t ny rt hu ch trong vic gim nh qu trnh r nhnh.

Page 28

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

Page 29

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009F. Cu trc iu kin

1. Cu trc lnh If

if (expression) block of statements { }V d mt chng trnh nh sau vi p dng cu trc If n gin

#! /usr/bin/perl w use strict; my $age = 100; if ( $age == 100 ) { print "Th qu !!!\n"; }Hoc c th t iu kin trn mt mnh n (single statement condition)

statement if (expression);V d bi trn vit li:

#! /usr/bin/perl w use strict; my $age = 100; print "Th qu !!!\n" if $age == 100;Vi kim tra iu kin n th ny rt d nhn v tit kim khong trng code. Nh trong source ch r, nu nh gi tr ca $age l 100 (so snh logic dng ton t ==) th s in ra dng ch Th qu ra mn hnh. Nu khng th khng lm g c.

Tuy nhin, thc t s c rt nhiu iu kin so snh r nhnh. V vy perl cung cp thm tnh nng chia nhnh iu kin nh sau:

if (expression) { block of statement } elsif (expression) {

Page 30

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

block of statement } else { block of statement }Bn c thy th thy nu c iu kin r nhnh th t kha Elsif s m nhn tip quy trnh x l expression khc trong iu kin, v bn c th c nhiu kha Elsif trong nhnh iu kin. Nu gi s khng cn iu kin no na th iu kin cui cng ch cn t kha Else khng cn expression v perl s nh gi cc iu kin v iu kin cui tnh qua khc bit (differences) d trong tp hp iu kin ca c khi lnh If..Elsif..Else Mt v d n gin kim tra tnh cht ca mt s:

#! /usr/bin/perl w use strict; my $num = -3; if ( $num < 0 ) { print "S m \n"; } elsif ($num == 0) { print "S 0 \n"; } else { print S dng \n"; }

R rng mt s c 3 trng hp c th l dng c th l m v c th l s trung gian 0. Thm vo , bn c th ghp cc iu kin trong lnh If vi cc ton t logic. V d kim tra mt s l bi ca 2:

Page 31

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009 #! /usr/bin/perl w use strict; my $num = 4; if ($num >= 0 && ($num % 2 == 0)) { print "Bi ca 2 \n"; } else { print "Khng phi l bi ca 2 \n"; }

Cu trc lnh iu kin r nhnh trong Perl hon ton ging v tng ng vi ngn ng C. Ngoi ra, bn c th lng ghp cc khi lnh iu kin r nhnh vi nhau trong Perl. V d: cch vit khc kim tra mt s l bi ca 2:

#! /usr/bin/perl w use strict; my $num = 4; if ( $num >= 0 ) { if ( $num % 2 == 0 ) { print "Bi ca 2 \n"; } else { print "Khng phi l bi ca 2 \n"; } } else { print "Phi l s khng m \n"; }2. Cu trc r nhnh unless Cng l mt cu trc r nhnh ging if nhng cch s dng unless vi logic ngc li so vi if. C 2 cch s dng r nhnh unless. + Cch 1: theo khi lnh

unless (expression) { block of statements } else { block of statements

Page 32

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

}+ Cch 2: theo iu kin n trong 1 statement

statement unless (expression)Cng xem v d sau thy cch s dng cu trc unless

#! /usr/bin/perl w use strict; my $num = 4; unless ($num < 0) { print "Bi ca 2 \n" unless $num % 2 != 0; } else { print "Phi l s khng m \n"; }

Trong ln gi unless th nht s c hiu l Ch khi no $num c gi tr nh hn 0 th chuyn n else pha di, nu khng vn tip tc thc hin khi lnh bn trong. Trong ln gi unless th hai, logic n s c hiu l Ch khi no $num khng chia ht cho 2 th dng li, ngc li th in ra chui hoc c th hiu thun chiu logic in ra chui TR KHI $num khng chia ht cho 2

Ngoi 2 cu trc r nhnh dng if v unless, cn c th s dng cp ton t (operator) ? : t iu kin ( cp chng c). C th bn bit trong C/C++ cn c kiu r nhnh theo switch case, trong perl v standard th khng h c. Tuy nhin, nm 2002, Damian Conway vit mt module to cu trc r nhnh switch..case tng t C/C++ (Switch.pm). Cu trc ny hi phc tp nn mnh s khng cp y. n y c l cc bn c th gii quyt nhng bi ton nh p dng vi iu kin r nhnh ri .

Page 33

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

Page 34

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009G. Nhp/ Xut (Standard I/O)

1. Standard Input y l mt handle chun c nh ngha sn trong perl dng nhn thng tin input t ngi dng. V d ly input t ngi dng v in ra gi tr nhp vo:

#! /usr/bin/perl -w use strict; # ly input t user my $input = ; # in ra kt qu print "Bn nhp vo: " . $input;

Bin $input c nh ngha hay khi to qua gi tr m ngi dng nhp vo. Sau , bn ch cn in ra kt qu, hay gi tr ca bin $input. Nu k hn bn s thy kt qu s c xung dng dng cui cng, trong khi bn khng h thm k t . L do ti sao nh? Cu tr li rt n gin: l v trong input ca ngi dng phi xc nhn bng phm [Enter] xc nhn input. V th, $input s cha lun c k t thnh ra khi bn in ra $input s t khc xung dng. trnh iu ny bn c th s dng 1 trong 2 hm sau ct b k t tha trong input ca user. chomp($string) : s kim tra k t cui cng ca chui, nu l k t th s xa n i khi chui, nu khng phi th khng lm g c. chop($string) : s xa i k t cui cng ca chui, bt k l k t g u s b xa.

Vy nu nh ngi dng nhp vo l mt gi tr s v mun s dng gi tr s th lm sao? Thc t, trong perl tt c cc d liu nhp vo t bn phm u dng chui, nu ngi dng nhp vo gi tr s v mun s dng n nh mt con s th bn ch vic p dng bin vi cc ton t ton hc (+ - * / ++ ) th lp tc bin s c chuyn sang dng s. Khi chuyn sang dng s th k t khi input s khng cn tn ti na.

Page 35

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009 #! /usr/bin/perl -w use strict; print "Hy nhp vo mt s bt k: "; # ly mt s t user my $number = ; $number **= 2; # ton t ly tha vit rt gn print "Gi tr bnh phng l: ", $number,"\n";

2. Ly i s ca chng trnh (command arguments) a. S dng list @ARGV Danh sch @ARGV c nh ngha sn trong Perl s dng ly danh sch cc i s vo chng trnh qua shell hay command. V th c th gi trc tip @ARGV ly gi tr truyn vo hoc gn gi tr cn ly t danh sch i s vo cc bin. V d: chng trnh tnh tng 2 s vi 2 s cho trc truyn qua shell @ARGV c nh ngha sn trong Perl s dng ly danh sch cc i s vo chng trnh qua shell hay command

#! /usr/bin/perl w # @file: sum.pl use strict; # ly 2 i s t chng trnh lu vo 2 bin my ($a, $b) = @ARGV; # in ra kt qu print "Tng: $a + $b = " . ($a + $b) . "\n";Cch chy code ny trn command shell nh sau:

$ perl sum.pl 4 5b. S dng shift V bn cht danh sch i s vo chng trnh chnh l mt list; c bit hn na l list ny c nh ngha sn, @ARGV, nu trn. Tuy nhin, ly cc gi tr trong list @ARGV bn khng cn thit phi gi n ra. Bn c th y tng phn t trong stack ra, ly t y ca stack, ta s dng hm shift ly gi tr ca i s vo. V d tnh tng ca 2 s vi 2 s cho trc qua i s t command shell

Page 36

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009 #! /usr/bin/perl -w # @file sum_02.pl use strict; # ly i s th nht my $a = shift; # ly i s th hai my $b = shift; # in ra tng print "Tng: $a + $b = " . ($a + $b) . "\n";3. S dng ton t (diamond operator) y l mt loi ton t c bit ng ly input.

#!/usr/bin/perl -w # @file: dm.pl # To mt file test.txt c ni dung: 123\n456\789 print ;

Nu chng trnh c cung cp i s vo chng trnh qua command shell th lp tc gi tr trong list @ARGV s c truyn ln lt vo . Tuy nhin, tnh cht ny ch h tr input vo l file ch khng phi gi tr bt k. Chy chng trnh nh sau:

$ perl dm.pl test.txtBn s thy ni dung ca file test.txt c xut ra mn hnh. Bn c th in ra ni dung nhiu file cng mt lc vi tn file c truyn qua i s ca command shell.

$perl dm.ok test.txt test_02.txt test_03.txtNu m chng trnh khng cung cp i s qua command shell th ngun input s c chuyn qua lc ny chnh l , tc l input vo t ngi dng. V d:

#!/usr/bin/perl -w use strict; my $input = ; print $input;Cc bn th chy code trn xem, bn nhp vo th chng trnh s in ra gi tr bn va nhp. Vai tr ca chnh l vai tr ca khi khng c i s truyn vo command shell.

Page 37

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 20094. Cc ngun khc Vi STDIN l stream chun nhp thng tin vo, trong perl cn c STDOUT l stream chun xut kt qu ra mn hnh v STDERR trong trng hp thng bo li. V c bn mc nh cc ch xut ra mn hnh l STDOUT nn khi bn s dng cc hm in ra mn hnh nh print v printf V d:

#!/usr/bin/perl -w print STDOUT "hello \n"; print "hello \n";Hai cu lnh print s dng trn cho ra kt qu tng ng. Trong Perl 5.10 cn c hm say vi tc dng tng t nhng s t ng c \n cui chui in ra.

Page 38

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009H. Cu trc vng lp (Repetition)

i khi bn vng phi trng hp c nhng cng vic hay qu trnh tng t phi lp i lp li nhiu ln m khng mun phi vit li on code , cu trc vng lp c thit k x l nhng trng hp nh vy. Sau y l mt s cc kiu vng lp s dng trong perl. 1. Cu trc while Cc cch s dng nh sau: a. nh gi trc ri thc hin

while (expression) { Block of statement }V d: in ra cc s t 1 n 10:

#! /usr/bin/perl -w use strict; # To mt bin iu khin my $i = 1; # Vng lp while ($i 10);

c. Thc hin mnh lnh trc ri nh gi

do { block of statement } until (expression);#! /usr/bin/perl -w use strict; # To bin iu khin my $i = 1; # Vng lp do { 3. Cu trc lp FOR . " "; # In ra gi tr ca $i print $i } until (++$i > 10); # Tng gi tr ca $i ln 1 ri so snh iu Cch s dng nh sau: kin

Page 41

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

for ( (expr_01; expr_02; expr_03) { block of statements }Expr_01: gi tr khi to trc vng lp Expr_02: iu kin thc hin vng lp Expr_03: thc thi sau khi kim tra iu kin d hiu hn kiu lp ny, cng i vo v d vi tnh in ra cc s t 1 n 10

#!/usr/bin/perl -w use strict; my $i; # to bin iu khin for ($i = 1; $i $path);[mode]: chnh l phng thc redirect file ca Unix Mode < > >> +< +> +>> Read Write Append Create Truncate Char R W A R+ W+ A+

Cch m FILEHANDLE vi 3 tham s:

open(FILEHANDLE, [mode], $PATH_TO_FILE);Tuy nhin, chc chn rng FILEHANDLE c to thnh cng hay khng, bn cn phi xc nhn, hay p iu kin thng bo nu nh vic to FILEHANDLE tht bi. y l cch thng thng c s dng kim tra tht bi nu xy ra.

open(FILEHANDLE, [mode] $PATH_TO_FILE) or die Create FILEHANDLE Faied!\n;Nu bn mun bit chnh xc l do tht bi, vic s dng bin $! l cn thit. V d: open(FH, "> /usr/bvKim/myfile") or die $!; Hm open() lun lun c gi tr tr v, v vy bn c th lu li gi tr ca hm open() tr v v kim tra kt qu, cng l mt cch kim tra vic thnh cng, tht bi ca to stream kt ni.

Page 45

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009To stream ri, kt thc s dng bn phi ng FILEHANDLE li xa i cc b nh tha sau khi s dng stream qua FILEHANDLE.

close(FILEHANDLE);Mt khi c stream hay FILEHANDLE s dng th vic tip theo chng ta cn bn ti l lm s dng FILEHANDLE to ra tng tc vi file. Tng t nh STDOUT hay STDIN ni trn cch s dng FILEHANDLE tng t. Nu nh bn s dng ly 1 dng input t ngi dng, th cng s tr v mt dng t File m stream ca FILEHANDLE tr ti. V d: in ra ni dung ca mt file ra mn hnh:

#!/usr/bin/perl -w # @file: out_file.pl use strict; open FILE, " th chng trnh s bo li. Mt trong nhng ng dng ni bt nht ca tham chiu hm trong perl l subroutine-callback, hay c th hiu l truyn hm vo v s dng nh mt bin. Kiu ny tng ng vi con tr hm function pointer callback trong ngn ng C/C++. Cng xt v d sau thy r hn mc ch ca sub callback.

Page 51

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009 #!/usr/bin/perl -w # @file: sub_callback.pl use strict; # php tnh cng sub calc_plus { my ($a, $b) = @_; return ($a + $b); } # php tnh tr sub calc_minus { my ($a, $b) = @_; return ($a - $b); } # hm thc hin php tnh v gi callback sub calculate { my ($func, $a, $b) = @_; $func->($a, $b); } # kim tra callback print "2 + 3 = ", calculate(\&calc_plus, 2, 3), "\n"; print "9 - 5 = ", calculate(\&calc_minus, 9, 5), "\n";

y c 2 hm thc hin php tnh ton calc_plus() v calc_minus(), v mt hm calculate() thc hin vic tnh ton thng qua vic gi hm tnh ton thc s lm tham s (callback). Trong hm calculate(), calc_plus() v calc_minus() c gn vo bin $func, s thc hin vic tham chiu ti hm gc v vy hm s c gi tng ng. Sub-Callback trong perl kh l quen thuc vi function pointer v callback trong ngn ng C.

Page 52

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009K. Phong cch comment

Cng nh cc ngn ng lp trnh khc, perl cng c cc k hiu ghi ch thch (comment) trong source. Nu bn mi bt u lp trnh th c th thc mc comment lm g th mnh xin gii thch tm tt th ny. Comment l mt cch ghi ch thch chen gia vo cc dng code hay on code gii thch ngha ca on code l g, hoc c th ghi ch thch mt s im no ng ch ca code, hoc l ghi ch ci g quan trng. hiu r hn tm quan trng ca comment, mnh a ra mt s cch ghi ch thch trong perl. 1. Comment mt dng Ghi ch thch ch cn mt dng trong perl, bn s dng k t # (sharp) trc, tt c cc chui hay bt c ci g bn ghi ng sau ci du # ny trn cng mt dng s b b qua b qua bi trnh dch perl.

V d mt chng trnh nh th ny:

#!/usr/bin/perl -w use strict; # thng bo yu cu user nhp vo tn print "Xin cho biet ten cua ban: "; # ch cho user nhp tn vo my $name = ; # xa i k t tha trong tn nhp chomp $name; # in ra tn ca user print "Ten cua ban la ".$name.".\n";Nh bn c th thy l trn mi dng lnh u c mt dng comment gii thch ngha ca cu lnh thc hin vic g. Do , m trong mt on code ln nu c nhiu on comment gii thch ngha th s rt tin li cho vic c hiu code. Tuy nhin c mt im hi bt tin bn c th d dng nhn ra y l nu nh mun comment nhiu dng th sao. Vy th chng l phi ghi u mi dng mt du #? Tht l bt tin. Nhng m ci bt tin ny cng lm sinh ra perl vi phong cch lp trnh tng i khc bit so vi cc ngn ng khc.

Page 53

[Hng dn lp trnh Perl cho ngi Vit Nam] Tc gi: [JaPh]

February 9, 2009

2. Comment nhiu dng vi