Perl on Ohjelmointikieli, skriptikieli

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

15. Loogiset operaatiot.
@ Leena Lahtinen Helia Ohjelman perusrakenteet 1. PERÄKKÄISRAKENNE 2. VALINTARAKENNE 3. TOISTORAKENNE.
JavaScript (c) Irja & Reino Aarinen, 2007
VBA –ohjelmoinnin perusteet
Ohjelman perusrakenteet
vuorovaikutteiset www-sivut 1.Asiakas-palvelinmalli kuvana Request Response request.asp response.asp.
2.8.3 Abstraktit tietotyypit
Markku Siermala, IMT Bioinformatiikan koulutusohjelma
C:\RI400 hakemistosta valitaan ExcelPDFConverter ja klikataan sitä.
Rakenteinen ohjelmointi
Taulukot: Array Taulukko Javassa pitää aina perustaa (new)
Rakenteinen ohjelmointi
Ohjelmointitaito (ict1td002, 12 op) Syksy 2008
Näytölle tulostaminen. 7.2 Sisällys System.out.println - ja System.out.print -operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden.
Sovellusohjelman suunnittelu & toteutus
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
Java-ohjelmointi Opas ammattimaiseen osaamiseen Luku 4 Toistolauseet
Yksinkertaiset graafiset syöttö- ja tulostustoiminnot.
Ehto- ja toistolauseet
Toiston tekeminen Javalla  Mikä toistorakenne on?  while toistorakenne  do-while toistorakenne  for toistorakenne 1.
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
Ohjelman perusrakenteet
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Map-luokka Mikä Map on? Mapin esittely ja luonti Map-luokan metodeja Mappiin lisääminen Mapin läpikäynti Mapista poistaminen 1.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Visual Basic -ohjelmointi
String-vertailusta ja Scannerin käytöstä (1/2)
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
Ville Seppänen PHP osa 1 Verkkotekniikan jatkokurssi Kevät 2003 Ville Seppänen
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Lomakkeet © Reiska, Lomakkeet Varsinkin Web-sovelluksia ajetaan täyttämällä sivulla lomake ja lähettämällä tiedot palvelimella olevan Web-sovelluksen.
Näppäimistöltä lukeminen Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In -luokka.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen Toistorakenne Ohjelmassa toistetaan tiettyjä toimenpiteitä monta kertaa peräkkäin Toisto noudattaa sille kuuluvia tarkkoja standardoituja.
1 Ohjelmointikielten varhaishistoria Esa-Matti Miettinen
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
RAKENNUSPALIKOITA SEINÄJOEN KANSALAISOPISTO Jussi Rasku Aki Sirviö.
© Jukka Juslin1 Osio2 Olio-ohjelmointi: Merkkijonot eli Stringit Jukka Juslin.
Rinnakkaisuus Järjestelmässä, jossa voi olla useita prosesseja rinnakkain suorituksessa voi tulla tilanteita, joissa prosessien suoritusta täytyy kontrolloida.
Visual Basic -ohjelmointi
Antti-Jussi Lakanen Nuorten peliohjelmointi 2009 / Jyväskylän yliopisto.
Kontrollirakenteet laajemmin
Visual Basic -ohjelmointi
Javascript 2: Ohjelmointikielen ominaisuudet Jaana Holvikivi Metropolia.
Funktio.
Ohjelmointi 1. toinen luento1 Taulukot n Kiinteät taulukot: alkioiden määrä tiedetään Dim intCount(12) As Integer 0 indeksit saavat arvoja 0-12 (Option.
XSL Teppo Räisänen
Valintarakenne valintarakenne alkaa aina kysymyksellä eli ehdolla ehto tarkoittaa, että muuttujan sisältöä verrataan toisen muuttujan sisältöön tai vakioon.
Listat eli luettelot listaelementit ovat lohkoelementtejä:  lista ja listan alkiot alkavat uudelta riviltä  listan jälkeen tuleva elementti alkaa uudelta.
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Muuttujan osoite int a=1; 0xbfffea64 /* tulostetaan a:n osoite*/ printf(“%p\n”, &a); 0xbfffea68 /* tulostetaan a:n osoite + 1*/ printf(“%p\n”, &a+1); /*
Ohjausjärjestelmien jatkokurssi
String-vertailusta ja Scannerin käytöstä (1/2)
7. Hyvä ohjelmointitapa..
13. Loogiset operaatiot.
7. Näytölle tulostaminen
16. Ohjelmoinnin tekniikkaa
Jouni Juntunen Oulun seudun ammattikorkeakoulu Liiketalouden yksikkö
7. Hyvä ohjelmointitapa..
7. Näytölle tulostaminen
Kontrollirakenteet laajemmin
13. Loogiset operaatiot.
Ohjelman perusrakenteet
4. Luokan testaus ja käyttö olion kautta
Ohjelmointia teknisille viestijöille
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

Perl on Ohjelmointikieli, skriptikieli Practical Extraction and Report Language Pathologically Eclectic Rubbish Lister Käytetään usein ”liimaamaan” järjestelmiä Larry Wall Perl on kieli, perl on binääri Unix hallinnointi ja CGI ohjelmointi

Perlin edut Kehittämisen nopeus Voima Käytettävyys Siirrettävyys Kehitys ympäristö Hinta Laajuus

Perus ohjelmointiympäristö Notepad tms editori Kirjoita koodia Talleta C:\tiedostot hakemistoon cmd komentokehoite Suorita kehoitteella

Perl skripti On nimeltään jotakin.pl Alkaa aina näin: #!/usr/bin/perl Sitten saa kirjoittaa koodia… esim: print ”Hei maailma!\n”; Suoritetaan komentoriviltä: C:\hakemisto>perl jotakin.pl

Syntaksin tarkistaminen Alussa kannattaa lukea varoitukset: C:\hakemisto>perl –w jotakin.pl -w optio tarkistaa syntaksin ja varoittaa virheistä C:\hakemisto>perl –c jotakin.pl Syntaksi tarkistin –c kertoo onko OK Debuggeri käynnistetään näin C:\hakemisto>perl –d jotakin.pl

Parametrit Skriptille voi antaa parametrejä välilyönnillä erottaen C:\hakemisto>perl jotakin.pl a b c Ne talletetaan @ARGV taulukkoon print ”$ARGV[0] on eka parametri\n”;

Parametrit Kaikkien parametrien tulostaminen foreach (@ARGV) { print ”$_ \n”; }

Ympäristö Ympäristömuuttujat sijaitsevat %ENV taulukossa foreach (keys %ENV) { print ”$_ = $ENV{$_}\n”; }

User input Skripti voi pysähtyä odottamaan käyttäjän syötettä Syöte tulee standard input virrassa print ”Kirjoita jotain ja paina enter…”; $a = <STDIN>; print ”Kirjoitit: $a\n”;

Harjoitus 1 Kiinalainen niukkuuspeli Kirjoita ohjelma, joka pyytää käyttäjältä luvun ja vastaa aina voittavansa niukasti yhdellä. Näytä myös lopputulos.

PerlDoc Perlin dokumentaatio sijaitsee täällä: file:///C:/Perl/html/index.html

Aliohjelma sub aliohjelma { Foreach (@_) print ”$_ \n”; }

Aliohjelmakutsu Joko näin: aliohjelma (1,”aaa”,3); Tai näin: $a = aliohjelma (1,2); Alempi odottaa paluuarvoa

Paluuarvo Aliohjelma voi palauttaa arvon $a = aliohjelma (1,2); print ”Vastaus on $a\n”; sub aliohjelma { my ($a,$b) = @_; $c = $a + $b; return $c; }

Skalaarit muuttujat $muuttuja Tyypitön yksiarvoinen muuttuja Merkkijono, luku tai muistiosoitus $a = 4; $b = 111.22; $c = ”merkkijono”; $d = ”hassu $c”; #$c lavennetaan $e = ’hassu $c’; #$c ei lavenneta $f = `dir`;

Taulukko @ @taulukko = (); Yksittäinen alkio $taulukko[0] $taulukko[1] = ”merkkijono”; foreach (@taulukko) { print $_, ”\n”; }

Lista @ @lista = (10,”merkkijono”,10.12, $muuttuja); @lista1 = (); push(@lista1,1,2,3); @lista2 = (4,5,6,7,8,9); push (@lista1, @lista2); $viimeinen_indeksi = $#lista1; $alkioiden_lkm = @lista1; $vika = pop(@lista1);

Harjoitus 2 Kirjoita ohjelma, joka pyytää käyttäjältä sanoja ja laittaa ne taulukkoon kunnes käyttäjä antaa sanan loppu. Tämän jälkeen ohjelma tulostaa sanojen määrän ja sanat. Käytetään do … while silmukkaa Puraistaan väärät merkit pois: chomp Evaluoidaan totuus eq:n negaatiolla ne

Harjoitus 2 #!/usr/bin/perl do { print "Anna sana: "; $sana = <STDIN>; chomp($sana); push (@lista, $sana); }while ($sana ne "loppu"); $a = @lista; foreach (@lista) print "$_ \n"; } print "Alkioita oli $a kpl\n"; Harjoitus 2

Assosiatiivinen taulukko % %hash_taulukko = (); %config = ( ”polku” => ”/usr/bin/joku”; ”url” => ”http://www.palvelin.com/prefix”; ”debug” => $debug; );

Harjoitus 3a #!/usr/bin/perl %config = (); $debug = 1; %config = ( "polku" => '/usr/bin/joku', "url" => 'http://www.palvelin.com/prefix', "debug" => $debug ); print "Mikä polku, url vaiko debug? : "; $a = <STDIN>; chomp($a); print "\n $a on $config{$a}"; Harjoitus 3a

Assosiatiivinen taulukko % viittauksena $href; $href->{ 'key' } = 'value'; $href->{ $key } = $value;

Harjoitus 3 b #!/usr/bin/perl $config; $debug = 1; $config->{"polku"} = '/usr/bin/joku’; $config->{"url"} = 'http://www.palvelin.com/prefix'; $config->{"debug"} = $debug; print "Mikä polku, url vaiko debug? : "; $a = <STDIN>; chomp($a); print "\n $a on $config->{$a}";

Harjoitus 3c Lisää edelliseen sorttaus ja kaikkien parametrien tulostus for my $sender ( sort keys %from ) { print "$sender: $from{$sender}\n"; } Tai for my $sender ( sort keys %{$from} ) { print "$sender: $from->{$sender}\n"; }

Ehtolauseet Testataan onko ehto voimassa vai ei eli evaluoidaan lausekkeen totuusarvo Merkkijono on tosi tyhjä merkkijono tai ”0” on epätosi Luku on tosi 0 on epätosi Olemassaoleva viittaus on tosi

if … else if (ehto) { } elsif (ehto) { } else{ }

if print ”Tosi on!” if ($a); unless $title = $header unless($title);

Vertailuoperaattorit Luvut Merkkijonot Selitys $a == $b $a eq $b Tosi jos $a ja $b yhtäsuuret $a != $b $a ne $b Tosi jos $a ja $b erisuuret $a <= $b $a le $b Tosi jos $a pienempi tai yhtäsuuri kuin $b $a < $b $a lt $b Tosi jos $a pienempi kuin $b $a >= $b $a ge $b Tosi jos $a suurempi tai yhtäsuuri kuin $b $a > $b $a gt $b Tosi jos $a suurempi kuin $b

Harjoitus 4 Tee perl ohjelma joka kysyy käyttäjältä kaksi lukua ja kertoo ovatko annetut luvut yhtäsuuret vai onko jompikumpi suurempi.

Silmukat while do … while for foreach Pois silmukasta pääsee komennoilla next ja last

while while (ehto) { Toimintaa… }

do … while do { toimintaa… }while (ehto);

for for ($i=0; $i<=10; $i++) { Toimintaa… } for $i (0..10)

foreach foreach (@taulukko) { Toimintaa (muista $_) }

Harjoitus 5 Tee perl ohjelma, joka pyytää käyttäjältä lukuja ja lopettaa kun haluttu summa on saavutettu. Jos käyttäjä syöttää muuta kuin numeron annetaan herja ja jatketaan. #!/usr/bin/perl while (1) { print "Anna numero: "; $a = <STDIN>; chomp($a); if ($a =~ /\d/) #print "Nummero"; $b += $a; } else print "Siis numeroita pyydettiin!\n" last if ($b >= 10); print "Summa on $b";

Tiedostot Tiedostoja luetaan KAHVAN kautta Tiedosto avataan luku <, kirjoitus > tai täydennystilaan >> $tied = ”c:\\tiedostot\\lista.txt”; open (KAHVA, ”<$tied”); while (<KAHVA>){ print ”$_ \n”; } close KAHVA;

Tiedostot Tiedostoon krjoittaminen print komennolla $tied = ”c:\\tiedostot\\teksti.txt”; open (KAHVA, ”>$tied”); print KAHVA ”normaali merkkijono…”; Tämä siis ylikirjoittaa! open (KAHVA, ”>>$tied”); Kirjoittaa tekstin perään

Random Satunnaisluvun generointi $lower=1; $upper=14; $random = int(rand( $upper-$lower+1 ) ) + $lower; print $random,"\n";

Harjoitus 5 Ventti Lisää vaikeusasteita: Pelaaja pyrkii saamaan 21 Yli menee metsään eli häviää heti Kirjoita ohjelma, joka tarjoaa ensin käyttäjälle kortteja (arvot1-14) ja kertoo aina summan Kun käyttäjä ei enää halua kortteja, jaetaan piilossa emännän käsi. Lopuksi kerrotaan tulos ja voittaja Lisää vaikeusasteita: Kirjoita jokaisen pelin tulos tiedostoon Pyydä panos ja kirjaa häviöt ja voitot tiedostoon Emännällä ventiksi riittää 20 Ässä on 1 tai 14 tilanteesta riippuen Viiden kortin ventti Tulosta lopuksi kuitti voitoista/häviöistä kassalle…

Regular Expressions Hakuja merkkijonoista Korvataan merkkijonoja toisilla Etsitään tiettyjä merkkejä Tarkistetaan syötteiden oikeellisuus Säännönmukainen lauseke kirjoitetaan / / merkkien sisälle ASCII merkkejä ja erikoismerkkejä

Regular Expressions $a = ”abcabcaBcabc”; if ($a =~ /ab/){print ”löytyi\n”} if ($a =~ /Ab/i){… if ($a =~ /^b/){… if ($a =~ /c$/){… if ($a =~ /^abc$/){… if ($a =~ /…abc/){… if ($a =~ /[ab]|[AB]/){… if ($a =~ /^(a[b|B]*c)*/){…

Substitute Korvataan merkkijono toisella $a =~ s/abc/cde/; $a =~ s/ä/a/g; $a =~ s/^\s+//; $a =~ s/\s+$//; $a =~ s/\s+/ /g;

Sähköpostin tarkistus if ($email =~ /^\w+@\w+(\.\w+){1,3}$/){… Jäsentäminen Aikaleima muotoa 20061025161530000 $ts =~ /^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{3})$/; print ”Vuosi = $1, kuukausi = $2, päivä = $3 jne…”;

Split Merkkijonon jakaminen merkin avulla $pvm = ”2006:10:25” ($v,$kk,$pv) = split /:/, $pvm; @sanat = split /\s/, $lause; ($avain,$arvo) = split /=/, $param; $$avain = $arvo;

Sisäänrakennetut funktiot each(AARR) Palauttaa (seuraavan) indeksi-arvo-parin (2-alkioinen taulukko) annetusta assosiatiivisestä taulukosta. Komennon avulla voidaan siis käydä assosiatiivisen taulukon alkiot läpi. exec(COM) Suorittaa annetun systeemikomennon, eikä koskaan palaa. exists $t{$i} Palautta TOSI, jos indeksi $i löytyy taulusta %t. exit(RET) Lopettaa suorituksen ja palaa arvolla RET. grep(re, @t) Palauttaa taulukon (tai täsmänneiden lkm) sisältäen taulukon @t ne alkiot, joihin merkkijonolauseke re täsmäsi. index(S,SS,P) Palauttaa ensimmäisen SS:n esiintymän paikan merkkijonossa S (tai paikan P jälkeen, jos käytössä, P on siis optio). join(FS,LIST) Splitin vastakohta. Liittää listan tai taulukon erillisiä merkkijonoja (LIST) yhdeksi merkkijonoksi, jossa kenttäerottimena FS. keys(AARR) Palauttaa taulukon, joka koostuu annetun assosiatiivisen taulukon indekseistä (nimistä). length(S) Palauttaa merkkien lukumäärän annetussa merkkijonossa. Jos parametria ei anneta, $_:n pituus. print FH LIST Tulostaa merkkijonon tai pilkulla erotellun listan merkkijonoja. FH on tiedostokahva,johon tulostetaan.

Sisäänrakennetut funktiot printf FH LIST Kuten print, mutta mahdollisuus tulostaa formatoidusti, kuten C-kielessä. rand UL Palauttaa satunnaisluvun väliltä 0-UL. reverse LIST Palauttaa parametrina annetun listan (esim. merkkijono) käänteisessä järjestyksessä. rindex(S,SS,P) Kuten index, mutta palauttaa viimeisen SS:n paikan merkkijonossa S. sleep SEC Laittaa skriptin nukkumaan parametrina sekunteina annetuksi ajaksi. sort LIST Palauttaa parametina annetun listan (esim. merkkijono) lajiteltuna. split(FS,STR) Jakaa merkkijonon taulukkoon. FS (voi olla regexp) ilmaisee kenttäerottimen, jonka mukaan merkkijono STR jaetaan. sprintf(FMT,LIST) Palauttaa FMT:n mukaan formatoidun merkkijonon listasta muuttujia (LIST). srand Asettaa siemenluvun rand-operaattorille. system(COM) Kuten exec, mutta ensin luodaan lapsiprosessi (fork). Jää odottamaan komennon paluuta. values(AARR) Palauttaa taulukon, joka koostuu annetun assosiatiivisen taulukon arvoista (vrt. keys).