8. Perl programozás. A Perl nyelv. szá gen Szeged Csűrös Miklós április 6. Hello world. Változók

Hasonló dokumentumok
Szkriptnyelvek. 1. UNIX shell

1. Alapok. #!/bin/bash

BASH SCRIPT SHELL JEGYZETEK

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

BASH script programozás II. Vezérlési szerkezetek

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

A programozás alapjai

AWK programozás, minták, vezérlési szerkezetek

Java II. I A Java programozási nyelv alapelemei

AWK programozás, minták, vezérlési szerkezetek

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

7. Laboratóriumi gyakorlat: Vezérlési szerkezetek II.

S z á m í t ó g é p e s a l a p i s m e r e t e k

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

A C# programozási nyelv alapjai

Szövegek C++ -ban, a string osztály

AWK programozás Bevezetés

Imperatív programozás

Webprogramozás szakkör

7. Laboratóriumi gyakorlat, 1. rész : Vezérlési szerkezetek II.

Operációs rendszerek. 10. gyakorlat. AWK - bevezetés UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Forráskód formázási szabályok

Occam 1. Készítette: Szabó Éva

Lekérdezések az SQL SELECT utasítással

Operációs Rendszerek II. labor. 2. alkalom

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Szkriptnyelvek II. Perl programok

PYTHON. Avagy hosszú az út a BioPythonig

length (s): Az s karaklerlánc hossza, substr(s,m,n): Az s mezőben levő karakterláncnak az m-edik karakterétől kezdődő, n darab karaktert vágja ki.

Bevezetés a programozásba I.

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Szoftvertervezés és -fejlesztés I.

Adatbázis és szoftverfejlesztés elmélet

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

C programozási nyelv

Szoftvertechnológia alapjai Java előadások

Programzás I gyakorlat

Írjon olyan programot a standard könyvtár alkalmazásával, amely konzolról megadott valós adatokból meghatározza és kiírja a minimális értékűt!

Intermec EasyCoder PM4i nyomtató programozásának alapjai Intermec Fingerprint v8.00 nyelven

Python tanfolyam Python bevezető I. rész

6. BASH programozás I.

Java II. I A Java programozási nyelv alapelemei

az Excel for Windows programban

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

C programozás. 1 óra Bevezetés

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Tipikus hibák a szövegszerkesztésben. Dr. Nyéki Lajos 2017

Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.

Operációs rendszerek. 4. gyakorlat. BASH bevezetés, script írása, futtatása UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

8. Laboratóriumi gyakorlat: Bevezetés a reguláris kifejezések használatába

Hálózatok építése és üzemeltetése

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

További vezérlő valamint számításokat megkönnyítő szerkezetek

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

Programozási nyelvek JAVA EA+GY 1. gyakolat

Kifejezések. Kozsik Tamás. December 11, 2016

A JavaScript főbb tulajdonságai

Matlab alapok. Vektorok. Baran Ágnes

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Smalltalk 2. Készítette: Szabó Éva

1. Jelölje meg az összes igaz állítást a következők közül!

LEGO robotok. XII. rész

Programozás I. gyakorlat

ELEMI PROGRAMOZÁSI TÉTELEK

Programozási nyelvek Python

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Bevezetés a programozásba I.

Operációs rendszerek gyak.

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

A C# PROGRAMOZÁSI NYELV

Szűrők Reguláris kifejezések, AWK

Kifejezések. Kozsik Tamás. December 11, 2016

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

3. Gyakorlat Ismerkedés a Java nyelvvel

Felvételi tematika INFORMATIKA

MATLAB alapismeretek I.

Példa: Aktuális könyvtár tartalmának fájlba mentése, melynek neve az aktuális dátum és idő: ls l > `date+%f_%h-%m`.txt

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Java programozási nyelv

Programozási nyelvek (ADA)

2018, Funkcionális programozás

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

Vezérlési szerkezetek

Operációs rendszerek gyakorlat

További vezérlő valamint számításokat megkönnyítő szerkezetek

Fordítóprogramok. Aszalós László szeptember 7.

Ismerkedés a Python programnyelvvel. és annak micropython változatával

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Komputeralgebra Rendszerek

Operációs Rendszerek Gyakorlat Triviális segédfeladatok június PERL Tömbök és hashek Feladat: május 26-i beugró

Átírás:

szá gen ann @ Szeged Csűrös Miklós 2016. április 6. 8. Perl programozás EGY PROGRAMOZÁSI NYELV egy formális, de Homo sapiensnek is értelmes nyelv, amivel a számítógépnek végrehajtható utasításokat tudunk adni. A leírt program végrehajtásának szempontjából megkülönböztetünk interpretált (értelmezett) és fordított nyelveket. Utóbbi esetében a forráskódot külön compiler program fordítja le gépi kóddá, ami aztán direktben futtatható. Ilyen pl. a C nyelv, amiben a Linux operációs rendszer magját megírta Linus Torvalds. Egy interpreter ezzel szemben a forráskódban megírt programot hajtja végre közvetlenül. Ilyen interpretált nyelv a Perl. A Perl nyelv 1. ábra. Linus Torvalds. A Perl nyelvet Larry Wall fejlesztette ki az 1980-as évek végén. A Perl programozási nyelv nagyon sokoldalú, mind a lehetséges programozási stílusok, mind a megoldható feladatok tekintetében. Nagyobb szoftverrendszerek fejlesztésére nem igazán felel meg, de a bioinformatikában lépten-nyomon előforduló kisebb és középes méretű problémák megodására kiválóan alkalmas. Legnagyobb előnye az, hogy szövegfájlokat kényelmesen lehet manipulálni vele, és gyorsan lehet prototípusokat fejleszteni. Hello world Egy Perl program egy egyszerű szöveges fájl 1, megírásához szövegszerkesztőt használunk (pl. gedit vagy nano). 2. ábra. Larry Wall. 1 szokás szerint.pl vagy.perl kiterjesztésű fájlnevet adunk print "Hello world!"; az első sor kötelezően #! karakterekkel kezdődik. Ez megmondja a Linuxnak, hogy egy script-ről van szó. Utána megadjuk a scriptet végrehajtó program pontos elérési útvonalát 2 : esetünkben /usr/bin/perl. a print egy Perl utasítás, ami üzenetet ír ki (a standard outputra) a (dupla) idézőjel "..." egy szöveget (stringet / karakterláncot / füzért) jelöl utasítások végere pontosvesszőt kell tenni 2 Parancssorból lellenőrizhetjük, hogy hol van: which perl a fájlnak adjunk végrehajtási engedélyt: chmod +x hello.pl Változók Egyszerű, ún. skaláris változók nevét a $ karakter vezeti be. A változó neve betűvel vagy aláhúzással (_) kezdődik, azt követheti akármennyi betű, számjegy vagy aláhúzás, akármilyen sorrendben. Kisbetűk és nagybetűk különböznek (a nyelv case sensitive)! Skaláris változó értéke lehet string, illetve egész vagy lebegőpontos szám (meg még más típus is, amiről egyelőre nem beszélünk).

PERL PROGRAMOZÁS 2 $a = "Hello"; $hosszu_nevu2 = "world!"; print "$a\t$hosszu_nevu2\n"; print $a\n ; a $a =... deklarálja, hogy van egy $a nevű változónk és beállítja az értékét a "..." dupla idézőjelek között szereplő változók értékét behelyettesíti az interpreter (ha ehelyett szimpla idézőjelet (aposztrófot) használsz, akkor viszont nem) a fordított törtvonal (backslash) speciális karaktereket vezet be: \t a tabulátor, \n pedig az új sor A skaláris változók mellett lehet használni lista (tömb / vektor) változókat: @a. A @ARGV egy előre definiált lista változó, ami a parancssorban megadott argumentumokat tartalmazza. # Végrehajtás: hello.pl elso masodik print "$ARGV[0] $ARGV[1]!\n"; a lista elemeit szögletes zárójeles jelöléssel érjük el, 0 index-szel kezdve: $lista[0] az első elem, $lista[1] a második, stb. A $#lista speciális változó az utolsó elem indexét adja (= lista hossza 1). a kettőskereszt # megjegyzést vezet be, bárhol lehet, ahol szóköz is. A megjegyzés a sor végéig tart, a Perl interpreter nem próbálja meg értelmezni. Műveletek és utasítások Artimetikai kifejezések. összeadás +, kivonás -, szorzás *, osztás /, hatványozás **, zárójelek (...). A kiértékelés sorrendje a matematikai konvenciókat követi: 5*(3+4) eredménye 35, de 5*3+4 eredménye 19. String konkatenáció. A pont. operátor két stringet fűz össze: $a.$b Függvények. Függvényeknek lehet 0, 1 vagy több argumentuma, melyeket vesszővel választunk el, az argumentumokat zárójelbe foglalhatjuk az olvashatóság kedvéért: print $a, $b, $c, "\n"; vagy print ($a, $b, $c, "\n"); Függvény Leírás Példa log(expr) természetes logaritmus log(5*2) 2.302 length(string) string hossza length("abcd") 4 index(hosszú,rövid) rövid első előfordulásának pozíciója hosszú-ban, vagy -1 index("zazie","az") 1 substr(szöveg,start,hossz) szöveg egy részének kivágása substr("zazie",1,2) az shift(lista) 0. elemet kivágja, többit eggyel előre csúsztatja $elso=shift @ARGV; push(lista,elem) elemet a lista végére rakja push(@lista, "42");

PERL PROGRAMOZÁS 3 Feltételes elágazás. A if utasításnál egy logikai feltétel teljesülése szerint elágazik a végrehajtás: ha x igaz, akkor csináld ezt, vagy ha nem, akkor azt. # Végrehajtás: poliglott.pl egyszo $elso = shift @ARGV; if ($elso eq "Szia") # egyenloseg teszt stringekre print "Te magyarul beszélsz\n"; else if ($elso eq "Hi") print "You are speaking in English\n"; else print "Ez nem tudom milyen nyelv :(\n"; a kapcsos zárójel egy öszetett utasítás ( blokk ); ez adja meg az igen (if) vagy nem (else) ágon végrehajtandó utasítássorozatot akárhány blokkot egymásba ágyazhatunk noha a szóközöket és tabulátorokat tetszés szerint rakosgathatjuk, a szöveg tördelésével mutatjuk a program logikáját: beágyazott blokkot egy TAB-bal beljebb írunk leggyakoribb logikai kondíciók két dolgot hasonlítanak össze valamilyen művelettel ezek különböznek számok és stringek összehasonlítására Összehasonlítás Numerikus String kisebb / nagyobb < / > lt / gt kisebb / nagyobb vagy egyenlő <= / >= le / ge egyenlő == eq nem egyenlő!= ne Ciklusok. Ugyanaz az utasítássorozat végrehajtható többször is egy ciklusban. # Végrehajtás: ciklus.pl [argumentumok] for ($i=0; $i<10; $i++) # 10-szer végrehajtjuk, $i-t eggyel növelve minden iterációban a ++ operátorral print "for ciklus $i\n"; $i=0; while ($i<10) # ugyanaz while ciklussal print "while ciklus $i\n"; $i++; foreach $a (@ARGV) print "Argumentum $a\n"; általános szintaxisban: for(init;vége;iter). A ciklus elején az interpreter végrehajtja a init utasítást, minen iteráció elején ellenőrzi, hogy vége

PERL PROGRAMOZÁS 4 teljesül-e, és minden iteráció végén végrehajtja a iter utasítást. Ezek mindegyike opcionális: for(;;) egy végtelen ciklus. while(vége) minden iteráció előtt ellenőrzi, hogy a kondíció teljesül-e foreach elem (lista) végrehajtja az iterációt a lista minden elemével, melyek értékét az elem változó veszi fel egyenként RTFM A Perl részletes használati kézikönyve olvasható a man paranccsal. A man perl felsorolja az egyes részeit: man perlintro egy nagyobb lélegzetű bevezetés kezdőknek, man perlop leírja az operátorokat, man perlsyn a szintaxist, man perlfunc az összes funkciót és így tovább. Bemenet soronkénti olvasása Tipikus Perl konstrukció, hogy egy fájl vagy a standard input olvasására egy ciklust használunk, while(<>) szintaxissal. Itt a <> azt jelenti, hogy amíg nincs vége az inputnak. A ciklus blokkját minden sorra végrehajtja az interpreter, magát a sort az előre definiált $_ valtozó tartalmazza. # Végrehajtás: fastaseqlen.pl < fasta # Megmondja milyen hosszúak a szekvenciák $current_seq = ""; # itt fogjuk tárolni az aktuális szekvenciát $current_name = ""; # itt fogjuk tárolni az aktuális szekvencia nevét while(<>) chomp; # levágja a sor vége karaktert a $_-röl if (substr($_,0,1) eq > ) # Fasta def line if ($current_name ne "") # ha nem az elsö, akkor kiírjuk az elözöt print $current_name, "\t", length($current_seq), "\n"; $name_pos = index($_, " "); # elsö szóközig keresünk if ($name_pos == -1) # nincs szóköz: sor végéig kell $name_pos = length($_); # új szekvencia kezdödik $current_name = substr($_, 1, $name_pos-1); $current_seq = ""; else $current_seq = $current_seq. $_; # végére illesztjük if ($current_name ne "") # az utolsót is kiírjuk ha kell print $current_name, "\t", length($current_seq), "\n";

PERL PROGRAMOZÁS 5 Feladatok (10 pont) Eheti gyakorlat: Perl program írása. a. (10 pont) Írjál egy programot, ami szépen megjeleníti a fehérje szekvenciát (a Wiki oldalnak megformázva), a Chry5.faa vagy AT6.faa fájlból, azonosító alapján. Kimenet formátuma: először Length:, utána szekvencia hossza, utána aa és új sor 1 üres sor maga a szekvencia a Fasta fájlból, soronként egy szóközzel kezdve, Fasta defline-t is beleértve %./getsequencebyid.pl 358.71.peg.42 < Chry5.faa Length: 87 aa >fig 358.71.peg.42 YciL protein MAQMSAHKAHLRNEDGVPEGFRILASGPMQAESGGSAAALIIAEARCIEDVMAFSDADPF VIHGVYNRIRILNWTPTLSRISELQGD b. (+2 bónusz pont) Írjál egy Perl programot, ami kiszámolja egy Fasta fájlban megadott genome assembly N50 értékét. Az N50 a medián contig hosszot jelenti. Ehhez olvasd végig a Fasta fájlt, és tárold el a szekvenciák hosszát egy listában (push). A végén rendezd sorba a listát: @rendezett = sort @lista;, és jelentsd a középső értéket (n elem esetén a középső elem indexe n/2, lefelé kerekítve egész számok osztásánál Perl automatikusan így kerekített eredményt ad). Beadandó: egyénenként (nem csoportban!) elküldeni az a. pontban megírt Perl programot csatolmányként az én címemre (csurosm@gmail.com), legkésőbb 2016. április 11-én 14:59-ig. A b. programot írhatjátok együtt a csoportban.