Perl Practical Extraction and Report Language Nikita Shipilov

  • Slides: 34
Download presentation
Perl Practical Extraction and Report Language Nikita Shipilov, 2008

Perl Practical Extraction and Report Language Nikita Shipilov, 2008

Keelest Dünaamiline programeerimiskeel Protseduraalne, ning toetab nüüd ka objektorienteeritud programmeerimist Esimene release aastal 1987

Keelest Dünaamiline programeerimiskeel Protseduraalne, ning toetab nüüd ka objektorienteeritud programmeerimist Esimene release aastal 1987 Sai tuntuks oma jõulise regulaaravaldiste mootori pärast Kasutatakse tekstitöötluses

Keelest Mõjutatud keeltest: AWK, BASICPLUS, C, C++, Lisp, Pascal, sed, Unix shell Mõjutas: Python,

Keelest Mõjutatud keeltest: AWK, BASICPLUS, C, C++, Lisp, Pascal, sed, Unix shell Mõjutas: Python, PHP, Ruby, ECMAScript, Dao, Windows Power. Shell OS: cross-platform Litsentsid: GNU General Public License, Artistic License

Looja Larry Wall http: //en. wikipedia. org/wiki/Larry_Wall

Looja Larry Wall http: //en. wikipedia. org/wiki/Larry_Wall

Ajalugu 1987 – Perl 1. 0 1988 – Perl 2 uuendatud regulaaravaldiste mootor 1989

Ajalugu 1987 – Perl 1. 0 1988 – Perl 2 uuendatud regulaaravaldiste mootor 1989 – Perl 3 on lisatud binaarandmete tugi 1991 – Programming Perl esimene de facto manuaal 1993 – Perl 4. 036

Ajalugu 1994 – Perl 5 uus interpretaator, on lisatud mõned uued komponendid (objektid, viidad,

Ajalugu 1994 – Perl 5 uus interpretaator, on lisatud mõned uued komponendid (objektid, viidad, leksikaalsed muutujad, moodulid), Unicode tugi, vood, on laiendatud OOP tugi 1995 – (CPAN) Comprehensive Perl Archive Network on loodud ühine repositoorium Perl moodulitele (praegu umbes 11 000 skripti 5 000 autorilt)

Ajalugu 2007 – Perl 5. 10. 0 switch-käsk "smart match operator" ~~ Perl 6

Ajalugu 2007 – Perl 5. 10. 0 switch-käsk "smart match operator" ~~ Perl 6 ? ? ?

Tunnused Perl on esialgselt loodud tekstitöötluseks Täna aga keelt kasutatakse paljude laiemate probleemide lahendamiseks

Tunnused Perl on esialgselt loodud tekstitöötluseks Täna aga keelt kasutatakse paljude laiemate probleemide lahendamiseks (süsteemide administreerimiseks, võrkude seadistamiseks, GUI, . . . ) Perl osutub olema rohkem praktiline kui ilus!

Tunnused Üldine Perl’i struktuur on pärit C keelest (muutujad, avaldised, väärtustamine, koodi plokid, subroutines,

Tunnused Üldine Perl’i struktuur on pärit C keelest (muutujad, avaldised, väärtustamine, koodi plokid, subroutines, . . . ), Listid – Lisp’ist, Hashes – AWK, Regulaaravaldised – sed-keelest.

Hello, World #!/usr/bin/perl print "Hello, world!n";

Hello, World #!/usr/bin/perl print "Hello, world!n";

Süntaks Perl’i programm koosneb deklaratsioonide järjendist, mis käivitatakse ülalt-alla. Tsüklid, alamrutiinid ja teised struktuurid

Süntaks Perl’i programm koosneb deklaratsioonide järjendist, mis käivitatakse ülalt-alla. Tsüklid, alamrutiinid ja teised struktuurid võimaldavad hüpata erinevate koodi osade vahel. Perl’i süntaktilised elemendid on valitavad, mis tähendab, et programmeerida võib nii nagu tahad!

Süntaks Ainuke asi, mida peab deklareerima, on muutuja: my $a; if ($a) {} Muutuja

Süntaks Ainuke asi, mida peab deklareerima, on muutuja: my $a; if ($a) {} Muutuja hoiab undef väärtust seni, kuni temale on määratud mingi väärtus (0 numbrite korral, “” String’ide korral)

Süntaks Alamrutiinide deklareerimine käib järgmiselt: sub myname; $me = myname $0 or die “…”

Süntaks Alamrutiinide deklareerimine käib järgmiselt: sub myname; $me = myname $0 or die “…” Samuti võib laadida rutiinide deklaratsioonid require või use käskudega.

Süntaks Komentaarid: # Iga käsk peab olema lõpetatud semikooloniga. Kui käsk on viimane plokis

Süntaks Komentaarid: # Iga käsk peab olema lõpetatud semikooloniga. Kui käsk on viimane plokis siis ‘; ’ võib mitte panna. Kui plokk on defineeritud “sama koodi sees”, siis selle eraldamiseks on vaja kasutada sulge { } if (EXPR) BLOCK if (!open(FOO)) { die "Can't open $FOO: $!"; }

Süntaks Number 0, String ‘’ ja tühi list on undef, ja vastavalt on väärad

Süntaks Number 0, String ‘’ ja tühi list on undef, ja vastavalt on väärad Boole’i kontekstis. Kõik teised väärtused on tõesed. NB! Sümbolid on case-sensitive!

Andmetüübid Perl’is on sisseehitatud kolm andmetüüpi: skalaarid, skalaaride massiivid ja assotsiatiivsed massiivid (hashes). Skalaarid

Andmetüübid Perl’is on sisseehitatud kolm andmetüüpi: skalaarid, skalaaride massiivid ja assotsiatiivsed massiivid (hashes). Skalaarid on kas sõna, number või viit millegile. Massiivid on järestatud skalaaride listid, mis on indekseeritud numbritega (alates 0 st). Hashes on võtmetega indekseeritud skalaaride kollektsioonid.

Andmetüübid Lisatakse veel failide “käsitlejad” (filehandles) ja alamrutiinid (subroutines). $foo # a scalar @foo

Andmetüübid Lisatakse veel failide “käsitlejad” (filehandles) ja alamrutiinid (subroutines). $foo # a scalar @foo # an array %foo # a hash &foo # a subroutine. FOO # a file handle or constant

Andmetüübid Näide: $name = “joe”; $number = 50; @scores = {1, 10, 25, 15};

Andmetüübid Näide: $name = “joe”; $number = 50; @scores = {1, 10, 25, 15}; %favorite = ( joe => 'red', sam => 'blue' ); # Defining a subroutine sub foo {. . . } foo $x, @y, %z;

Standart IO open(IN, "< input. txt") or die "cant open input file: $!"; open(OUT,

Standart IO open(IN, "< input. txt") or die "cant open input file: $!"; open(OUT, ">> output. txt") or die "cant open output file: $!"; while ($line = <IN>) { # write data to a file print OUT $line; } close(IN); close(OUT); print "$filename exists" if (-e $filename); print "$filename file size is ". (stat $filename)[7]; @txtfiles = <*. txt>; @txtfiles = `dir /b *. txt`; # perl globbing # or use the shell (slower), needs chomping

Struktuurid Peamised struktuurid, mis kasutatakse voo kontrollimiseks, on järgmised: if (EXPR) BLOCK else BLOCK

Struktuurid Peamised struktuurid, mis kasutatakse voo kontrollimiseks, on järgmised: if (EXPR) BLOCK else BLOCK if (EXPR) BLOCK elsif (EXPR) BLOCK. . . else BLOCK LABEL while (EXPR) BLOCK continue BLOCK LABEL until (EXPR) BLOCK continue BLOCK LABEL for (EXPR; EXPR) BLOCK LABEL foreach VAR (LIST) BLOCK continue BLOCK LABEL BLOCK continue BLOCK

Struktuurid Rohkem informatsiooni: http: //search. cpan. org/dist/perl/pod/perlsyn. pod Ja operaatorite kohta: http: //search. cpan.

Struktuurid Rohkem informatsiooni: http: //search. cpan. org/dist/perl/pod/perlsyn. pod Ja operaatorite kohta: http: //search. cpan. org/dist/perl/pod/perlop. pod

Regulaaravaldised Regulaaravaldiste mootor Perl’is põhineb backtracking algoritmil (brute-force). Avaldiste süntaks oli esialgselt võetud Unix

Regulaaravaldised Regulaaravaldiste mootor Perl’is põhineb backtracking algoritmil (brute-force). Avaldiste süntaks oli esialgselt võetud Unix Version 8 süsteemist. Kuid praegu Perl’i regexp pakub palju rohkem võimalusi.

Regulaaravaldised Võrdlusoperatsioonid saavad kasutada erinevaid laiendeid (modifiers): • • • m – uuri teksti

Regulaaravaldised Võrdlusoperatsioonid saavad kasutada erinevaid laiendeid (modifiers): • • • m – uuri teksti kui mitmerealist sõnet, s – üherealine sõne, i – case-insensitive pattern matching x – luba tühikuid ja kommentaare p – hoia ${^PREMATCH}, {$^MATCH} ja ${^POSTMATCH} edasiseks kasutamiseks • g ja c – globaalne võrdlus, kursor samal kohal

Regulaaravaldised Metasümbolid: • •  ^. $ Quote the next metacharacter Match the beginning

Regulaaravaldised Metasümbolid: • • ^. $ Quote the next metacharacter Match the beginning of the line Match any character (except newline) Match the end of the line (or before newline at the end) • | Alternation • () Grouping • [] Character class

Regulaaravaldised Kvantorid: • • • * Match 0 or more times + Match 1

Regulaaravaldised Kvantorid: • • • * Match 0 or more times + Match 1 or more times ? Match 1 or 0 times {n} Match exactly n times {n, } Match at least n times {n, m} Match at least n but not more than m times

Regulaaravaldised • • • *? Match 0 or more times, not greedily +? Match

Regulaaravaldised • • • *? Match 0 or more times, not greedily +? Match 1 or more times, not greedily ? ? Match 0 or 1 time, not greedily {n}? Match exactly n times, not greedily {n, }? Match at least n times, not greedily {n, m}? Match at least n but not more than m times, not greedily

Regulaaravaldised “Greedy" tähendab seda, et avaldisi otsitakse teksti lõpuni, ja tagastatakse pärast ainult etteantud

Regulaaravaldised “Greedy" tähendab seda, et avaldisi otsitakse teksti lõpuni, ja tagastatakse pärast ainult etteantud matching’ute arv.

Regulaaravaldised Possessiivkvantorid: • *+ Match 0 or more times and give nothing back •

Regulaaravaldised Possessiivkvantorid: • *+ Match 0 or more times and give nothing back • ++ Match 1 or more times and give nothing back • ? + Match 0 or 1 time and give nothing back • {n}+ Match exactly n times and give nothing back (redundant) • {n, }+ Match at least n times and give nothing back • {n, m}+ Match at least n but not more than m times and give nothing back

Regulaaravaldised Sümbolite klassid: http: //search. cpan. org/dist/perl/pod/perlre. pod#___top

Regulaaravaldised Sümbolite klassid: http: //search. cpan. org/dist/perl/pod/perlre. pod#___top

Regulaaravaldised Näide: my $email = "this. is@my-email. id"; if ($email =~ /(. +)@(. +).

Regulaaravaldised Näide: my $email = "this. is@my-email. id"; if ($email =~ /(. +)@(. +). (. {2, 4})/) { print "E-mail : $emailn"; print "ID : $1n"; print "Domain : $2n"; print "Tail : $3n"; } E-mail : this. is@my-email. id ID : this. is Domain : my-email Tail : id

Smart matching $b ~~ $a: $a $b Type of Match Implied Matching Code =============

Smart matching $b ~~ $a: $a $b Type of Match Implied Matching Code ============= Code[+] referential equality $a == $b Any Code[+] scalar sub truth $b->($a) Hash hash keys identical [sort keys %$a]~~[sort keys %$b] Hash Array hash slice existence grep {exists $a->{$_}} @$b Hash Regex hash key grep /$b/, keys %$a Hash Any hash entry existence exists $a->{$b} Array arrays are identical[*] Array Regex array grep /$b/, @$a Array Num array contains number grep $_ == $b, @$a Array Any array contains string grep $_ eq $b, @$a

Smart matching $b ~~ $a: $a $b Type of Match Implied Matching Code =============

Smart matching $b ~~ $a: $a $b Type of Match Implied Matching Code ============= Any undefined !defined $a Any Regex pattern match $a =~ /$b/ Code() results are equal $a->() eq $b->() Any Code() simple closure truth $b->() # ignoring $a Num numish[!] numeric equality $a == $b Any Str string equality $a eq $b Any Num numeric equality $a == $b Any string equality $a eq $b ! - either a real number, or a string that looks like a number

Viited • • http: //www. perl. com http: //www. perl. org http: //en. wikipedia.

Viited • • http: //www. perl. com http: //www. perl. org http: //en. wikipedia. org/wiki/Perl http: //www. google. com

Tänan!

Tänan!