• Keine Ergebnisse gefunden

Skript starten

N/A
N/A
Protected

Academic year: 2022

Aktie "Skript starten"

Copied!
37
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Perl

! Skriptsprache

! Wenig Code f¨ur einfache Aufgaben

! Sehr viele String-Funktionen

! Keine Typsicherheit, keine Deklarationen notwendig

! Fast immer mehr als ein Weg, eine Aufgabe zu erledigen

(2)

Perl-Skript

#! / u s r / b i n / p e r l

# d i e f o l g e n d e Z e i l e g i b t ”H a l l o Welt ” a u s p r i n t ”H a l l o Welt\n ” ;

(3)

Skript starten

p e r l v e r s u c h . p l p e r l w v e r s u c h . p l . / v e r s u c h . p l

(4)

Datentypen

Skalar: $scalar Array: @array Hash: %hash

F¨ur Arrays und Hashes keine vorherige Initialisierung mit fester (oder variabler) Gr¨oße notwendig

my$var: Geltungsbereich auf aktuellen Block beschr¨anken

(5)

Skalare

$ h a l l o = ”Welt ” ;

$ w e r t = 1 ;

$ d o u b l e w e r t = 6 . 0 2 3 e23 ;

$ w e r t 2 = $ w e r t 1 ;

(6)

Arrays

@ a r r a y = ( 1 , 2 , 3 , 4 ) ;

@ a r r a y = ( ”H a l l o ” , ” ” , ”Welt ” ) ;

@ a r r a y = ( 1 , ”H a l l o ” , 1 . 5 ) ;

$ a r r a y [ 0 ] = ”H a l l o ” ;

$ a r r a y [ 1 0 ] = ”Welt ” ;

$ w e r t = $ a r r a y [ 7 ]

(7)

Hashes

%has h = ( ”H a l l o ” => 1 , ”Welt ” => 2 ) ;

%has h = ( ”H a l l o ” => ”Welt ” , ”Welt ” => ”w e i t ” ) ;

$ has h{”H a l l o ”} = ”Welt ” ;

$ has h{”Welt ”} = 5 ;

$ has h{”H a l l o ”} = $ has h{”Welt ”} ∗ 0 . 4 3 ;

(8)

Besonderheiten

Besondere Variablen:

$0 # Name d e s Programms

@ARGV # Argumente d e s Programms

$ # o f t a k t u e l l e r Wert e i n e r ( S c h l e i f e n−) Anweisung L¨ange eines Arrays:

$ l e n g t h = @ a r r a y ;

Index des letzten Elements eines Arrays:

$ l a s t = $# a r r a y ;

(9)

Operatoren

Wie ¨ublich:

+, , / , , % Potenz:∗∗

Konkatenation: . String-Multiplikation: x Mit Zuweisung:

+=,=, /=,=, .=, x=

Inkrement/Dekrement:

++$a, $a++,−−$a, $a−−

(10)

Operatoren (2)

Logische Operatoren:

&&, ||, !

and, or , not, xor Vergleich:

==, !=,<,>,<=,>=

$a<=>$b

$a < $b : 1

$a > $b : 1

$a == $b : 0

(11)

Bereichsoperator (..)

@ a r r a y = @ a r r a y [ 1 . . 5 ] ;

@ a r r a y = @ a r r a y [5 . . 1] # l e t z t e 5 E l e m e n t e

@ a r r a y = @ a r r a y [ 1 0 . . $# a r r a y ] # 1 0 . b i s l e t z t e s E le m e nt

”magisches“ Autoinkrement:

@alph = ( ”A ” . . ”Z ” ) ;

@twosym = ( ”AA ” . . ”ZZ ” ) ;

(12)

Kontrollstrukturen

i f ( . . . ){ . . . }e l s i f ( . . . ){

. . . }e l s e{

. . . }

u n l e s s ( . . . ){ . . .

}

(13)

Kontrollstrukturen (2)

w h i l e ( . . . ){ . . .

}

u n t i l ( . . . ){ . . .

}

f o r( $ i =0; $ i<100; $ i ++){ . . .

}

f o r e a c h $ v a l u e ( @ a r r a y ){ }

(14)

Dateihandles

STDIN , STDOUT, STDERR

open(SESAM, ”<f i l e ”) # l e s e n open(SESAM, ”>f i l e ”) # s c h r e i b e n open(SESAM, ”>>f i l e ”) # anhaengen Testen ob Datei existiert:

if( e /pfad/zur/datei ){ ... }

open(SESAM, ”>f i l e ”) o r d i e ”Could n o t open f i l e !\n ” ;

(15)

Lesen und Schreiben

w h i l e(<SESAM>){ p r i n t $ ; }

w h i l e(<SESAM>){ p r i n t; }

w h i l e(my $ l i n e = <SESAM>){ p r i n t $ l i n e ;

}

i f( d e f i n e d( $ l i n e = <SESAM> ) ){ p r i n t $ l i n e ;

}

(16)

Pattern matching

Pattern matching

(17)

Konkatenation

”H a l l o ” . ” ” . ”Welt ”

$a . $b

”$a $b ”

”The c o n t e n t o f a i s $a ”

(18)

Substrings

s u b s t r( $ s t r , 1 0 , 1 5 ) # ab Pos . 1 0 , L ”ange 15 s u b s t r( $ s t r , 1 0 ) # ab Pos . 1 0 , b i s Ende s u b s t r( $ s t r , 10) # l e t z t e 10 Z e i c h e n s u b s t r( $ s t r , 0 , 0 ) = ”H a l l o ” # an Anfang

s u b s t r( $ s t r , 0 , 1 ) = ”H a l l o ” # e r s t e s Z e i c h e n e r s e t z t s u b s t r( $ s t r , 1) = ”H a l l o ” # l e t z t e s Z e i c h e n e r s e t z t

chomp( $ s t r ) # e n t f e r n t n e w l i n e s am Ende

(19)

Regul¨are Ausdr¨ucke

\ Escape \n

| Alternative a|b

( ) Gruppierung (a|b)c

Bereiche AZaz

[ ] Zeichenklasse [ACGT]

ˆ Anfang ˆ(Hallo | Welt)

$ Ende (the | end)$

. beliebiges Zeichen (ˆ.$)

(20)

Quantifikatoren

0 - n mal

+ 1 - n mal

? 0 - 1 mal

{n} n mal

{n,} mindestens n mal {n,k} n bis k mal

Normalerweise maximal gematcht, mit nachgestellten ? minimal

(21)

Match

m/ p a t t e r n / / p a t t e r n / Skalerer Kontext:

$ s t r =˜ m/ p a t t e r n /

# g i b t wahr ( 1 ) o d e r f a l s c h ( ””) z u r ”uck i f( $ s t r =˜ m/ p a t t e r n / ){ . . . }

Listenkontext:

@ a r r a y = $ s t r =˜ m/ p a t t e r n /g # a l l e matches i n L i s t e Modifier:

i : case-insensitive

g: globale Suche, progressive Suche

(22)

Match (2)

Progressive Suche:

w h i l e( $ s t r =˜ m/ p a t t e r n / i g ){ . . . } Besondere Funktionen und Variablen:

pos($str): Position des Zeichens nach aktuellem match length($str): L¨ange von $str

$&: aktueller match

$‘: Zeichen davor

$’: Zeichen dahinter

pos($str) ==length($‘) +length($&)

(23)

Substitution

s///

$ s t r =˜ s/ p a t t e r n / r e p l a c e m e n t / ;

$ s t r =˜ s/ p a t t e r n / r e p l a c e m e n t / g i ;

$ s t r =˜ s/ p a t t e r n /\u$&/g ;

( $ s t r t e m p = $ s t r ) =˜ s/ p a t t e r n / r e p l a c e m e n t /g ; f o r $ ( @ l i n e s ) { $ =˜ s/ p a t t e r n / r e p l a c e m e n t /g } f o r ( @ l i n e s ) { s/ p a t t e r n / r e p l a c e m e n t /g }

(24)

Capturing

w h i l e( $ l i n e =˜ m/ ( ( .) : ( .) ) ){ p r i n t ”$1 => $2 , $3 ” ;

}

$ l i n e =˜ s/ ( .)( .) /$2+$1 /g ;

$ l i n e = 1 2 3 4 5 6 7 8 9 0 ;

w h i l e ( $ l i n e =˜ s/ ( [ 09 ] + ) ( [ 09 ]{3}) ( $| ) / $1 $2$3 /g ){p r i n t ” $ l i n e\n ” ; } 1234567 890

1234 567 890 1 234 567 890

w h i l e ( $ l i n e =˜ s/ ( [ 09 ] + ) ( [ 09 ]{3}) ( $| ) / $1 $2$3 /g ){}

1 w h i l e ( $ l i n e =˜ s/ ( [ 09 ] + ) ( [ 09 ]{3}) ( $| ) / $1 $2$3 /g ) ;

(25)

Ubersetzung ¨

t r///

$ s t r =˜ t r/ l i s t / l i s t /

$ s t r =˜ t r/AZ/az / ;

Achtung: Keine Regul¨aren Ausdr¨ucke, keine Muster, sondern Listen!

(26)

Beispiele

$ s t r = ”ACATGATAGGCGTATA” ;

i f( $ s t r =˜ m/ ( (TA){2} |(TA(C|G) + ) ) / ){ p r i n t $ &. ”\n ” ;

}

Ausgabe: TAGGCG

(27)

Beispiele

$ s t r = ”ACATGATAGGCGTATA” ;

i f( $ s t r =˜ m/ ( (TA){2} |(TA(C|G) + ) ) / ){ p r i n t $ &. ”\n ” ;

} Ausgabe:

TAGGCG

(28)

Beispiele (2)

$ s t r = ”ACATGATAGGCGTATA” ;

i f( $ s t r =˜ m/ ( (TA){2} |(TA(C|G) + ? ) ) / ){ p r i n t $ &. ”\n ” ;

}

Ausgabe: TAG

(29)

Beispiele (2)

$ s t r = ”ACATGATAGGCGTATA” ;

i f( $ s t r =˜ m/ ( (TA){2} |(TA(C|G) + ? ) ) / ){ p r i n t $ &. ”\n ” ;

} Ausgabe:

TAG

(30)

Beispiele (3)

$ s t r = ”ACATGATATATA” ;

i f( $ s t r =˜ m/ ( (TA){2} |(TA(C|G) + ? ) ) / ){ p r i n t $ &. ”\n ” ;

}

Ausgabe: TATA

(31)

Beispiele (3)

$ s t r = ”ACATGATATATA” ;

i f( $ s t r =˜ m/ ( (TA){2} |(TA(C|G) + ? ) ) / ){ p r i n t $ &. ”\n ” ;

} Ausgabe:

TATA

(32)

Beispiele (4)

$ s t r = ”ACATGATAGGCGTATA” ;

w h i l e( $ s t r =˜ m/ ( (TA){2} |(TA(C|G)+))/ g ){ p r i n t $ &. ”\n ” ;

}

Ausgabe: TAGGCG TATA

(33)

Beispiele (4)

$ s t r = ”ACATGATAGGCGTATA” ;

w h i l e( $ s t r =˜ m/ ( (TA){2} |(TA(C|G)+))/ g ){ p r i n t $ &. ”\n ” ;

} Ausgabe:

TAGGCG TATA

(34)

Beispiele (5)

$ s t r = ”ACATGATAGGCGTATA” ;

$ s t r =˜ s/A/T/g ;

$ s t r =˜ s/C/G/g ;

$ s t r =˜ s/G/C/g ;

$ s t r =˜ s/T/A/g ; p r i n t $ s t r . ”\n ” ;

Ausgabe:

ACAACAAACCCCAAAA

(35)

Beispiele (5)

$ s t r = ”ACATGATAGGCGTATA” ;

$ s t r =˜ s/A/T/g ;

$ s t r =˜ s/C/G/g ;

$ s t r =˜ s/G/C/g ;

$ s t r =˜ s/T/A/g ; p r i n t $ s t r . ”\n ” ; Ausgabe:

ACAACAAACCCCAAAA

(36)

Beispiele (6)

$ s t r = ”ACATGATAGGCGTATA” ;

$ s t r =˜ t r/ACGT/TGCA/ ; p r i n t $ s t r . ”\n ” ;

Ausgabe:

TGTACTATCCGCATAT

(37)

Beispiele (6)

$ s t r = ”ACATGATAGGCGTATA” ;

$ s t r =˜ t r/ACGT/TGCA/ ; p r i n t $ s t r . ”\n ” ;

Ausgabe:

TGTACTATCCGCATAT

Referenzen

ÄHNLICHE DOKUMENTE

Wie Sie bereits aus Kapitel 2 wissen, versteht man unter einem Algorithmus eine L¨ osungs- anweisung f¨ ur ein Problem, die aus endlich vielen Schritten besteht. Einem

Mathematik f¨ ur Chemiker 1: online-Vorlesung 2.6) Differentiation von Funktionen einer Variabler..

4.1) Funktionen mehrerer Variabler, partielle Ableitung.

Hier haben wir eine dimensionslose Gr¨oße, die f¨ ur den “eindimensionalen” Fall Sinn

 Wird eine Methode überschrieben, ist die Methode der Superklasse in einer Instanz der Subklasse nicht mehr sichtbar und es wird die „neue“ Version Instanz der Subklasse nicht

eines Merkmals ist die Summe aller Messwerte dividiert durch die Anzahl aller Messwerte einer Messreihe..

Dr¨ ucken Sie das chemische Potential eines zweidimensionalen Halbleiters im Rahmen der Effektiv- massen-N¨aherung als Funktion der Zahl der Elektronen pro Fl¨acheneinheit aus.

Dabei sollen die Koeffizienten (a k ) so sein, dass man den Reihen einen Sinn geben kann.. Dies