Sie sind auf Seite 1von 25

MERIAN-SCHULE FREIBURG

Bioinformatik

Perl
Practical extraction and report language

Inhalt

1. Einführung ........................................................ Seite 2

2. Grundlagen........................................................ Seite 3

3. Kontrollstrukturen.............................................. Seite 5

4. Variablen............................................................ Seite 7

5. Filehandles......................................................... Seite 10

6. Pattern Matching und Reguläre Ausdrücke....... Seite 11

ANHANG

A: Software............................................................ Seite 15

B: Variablen - Skalara, Arrays, Hashes ................ Seite 16

C: Nützliche Perl-Skripts ...................................... Seite 17

D: Übungsaufgaben............................................... Seite 19

E: Links................................................................. Seite 25

Dr. Harald Bobeth 19.10.2011 Seite 1/25


MERIAN-SCHULE FREIBURG
Bioinformatik

1. Perl – Einführung

1.1 Drei Beispiele

1. Umwandlung einer Aminosäurensequenz im Einbuchstabencode in eine Sequenz im


Dreibuchstabencode

Skript: Eincode_zu_Dreicode.pl mit der Datei : Chymotrypsin_B_1Code.txt

2. Extraktion von Teilinformationen aus einer Datei im FASTA-Format

Skript: Lesen_Mult_FASTA_hash.pl mit der Datei: Presenilin_hum_prot_mult.fasta

3. Ermittlung einer Konsensus-Sequenz

Skript: Consensussequenz.pl mit derDatei: aligned.fas

1.2 Stärken der Programmiersprache „Perl“

• Auslesen von Textdateien


• Manipulation von Textdateien

1.3 Geschichte

Perl wurde 1987 von Larry Wall entwickelt. Es geht die Geschichte, dass Wall vernetzte
Rechner an der Ost- und Westküste der USA betreuen musste. Dazu gehörte auch die Analyse
von Berichten und das Erstellen von Übersichtslisten. Mit den bis dahin herkömmlichen
Programmiermitteln hätte er dies nur mit großem zeitlichen Aufwand verwirklichen können.
Deshalb habe er eine neue Programmiersprache erfunden:

Pearl: Practical extraction and report language

Später wurde das “a” im Namen weggelassen:

Perl

Spötter übersetzen Perl mit: Pathologically eclectic rubbish lister

Zur Software siehe Anhang A

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 2/25


MERIAN-SCHULE FREIBURG
Bioinformatik

2. Perl – Grundlagen

2.1 Eingabe per Tastatur, Ausgabe auf dem Bildschirm

Öffnen Sie mit dem Perl-Editor das Skript Eingabe_Ausgabe.pl.


Starten Sie das Programm (Run in Command Prompt oder Shift + F9). Auf eine Registrierung
wird verzichtet.
Schließen Sie das MS-DOS-Fenster.

Hinweis: Wie ein Programm gestarten wird, wird im Folgenden nicht mehr extra aufgeführt.

Analysieren Sie das Skript:


 In einem Perl-Skript unterscheidet man Anweisungen und Kommentare. Wie kann
PERL zwischen Kommentaren und Anweisungen unterscheiden?
 Welche Aufgabe hat $skalart?
 Welche Auswirkungen hat die Anweisung „chomp“? Überprüfen Sie dies, indem Sie
die entsprechende Zeile als Kommentar-Zeile ausweisen.
 Stellen Sie weitere Eigenheiten fest.

Programmier-Aufgabe:

Schreiben Sie ein eigenes kurzes Eingabe-Ausgabe-Skript (ohne Kommentare) und speichern
Sie es unter einem selbst gewählten Namen ab.

2.2 Berechnungen

Analysieren Sie das Skript Berechnungen.pl


 Was bedeutet das Zeichen „$“ vor einem Zeichen bzw. einer Zeichenfolge?
 Was bewirkt die Angabe „\n“?

Programmier-Aufgaben:

1. Nach Eingabe einer Zahl soll deren Quadrat berechnet werden.


Hinweis: Verwenden Sie statt der Berechnung wie y = x * x die Funktionsschreibweise
y = x2. Suchen Sie im Internet, wie dies geht.

2. Nach Eingabe einer Zahl soll deren Quadratwurzel berechnet werden.

2.3 Einfache Manipulationen von Texten

Analysieren Sie das Skript Text_String_Operationen.pl selbstständig!

Dr. Harald Bobeth 19.10.2011 Seite 3/25


MERIAN-SCHULE FREIBURG
Bioinformatik

Programmier-Aufgaben:

1. Geben Sie in das Perl-Skript eine aus dem Internet gesuchte DNA-Sequenz ein und
lassen Sie deren Länge bestimmen. Hinweis: $dna = „atgcgt....gtaca“;

2. Nach Eingabe eines Wortes soll dieses unterstrichen auf dem Bildschirm ausgegeben
werden. Hinweis: Die Striche befinden sich eine Zeile tiefer.

Zusammenfassung

Fassen Sie die wichtigsten Befehle, Operatoren usw. in einer WORD-Datei tabellarisch
zusammen und ergänzen Sie in Zukunft Ihre Tabelle.

2.4 Einfache Ersetzungen: Ersetzen.pl

Das nachfolgende Skript ist eine Einführung in das große Kapitel „Pattern Maching“ (vergl.
Kapitel 6)

Analysieren Sie das Skript Ersetzen.pl.


 Welche neuen Operatoren erkennen Sie?
 Schreiben Sie sich die neuen Befehle heraus..

Programmier-Aufgabe

Schreiben Sie ein Programm, das folgende Anforderungen erfüllt:

1. Auf Aufforderung geben Sie eine RNA-Sequenz mit 4 Nukleotiden ein.


2. Auf dem Bildschirm wird ein entsprechender Ausschnitt aus einem DNA-
Doppelstrang ausgegeben. Diese Ausgabe soll folgende Form haben (Beispiel):

5’-AGCT-3’
IIII
3’-TCGA-5’

Speichern Sie das Programm unter RNA_in_DNA.pl ab.

Wenn der Benutzer fehlerhafte Eingaben macht, ist das Programm nicht brauchbar. Überlegen
Sie, welche Fehler der Benutzer machen könnte. An welchen Stellen müsste das Programm
ergänzt werden, damit fehlerhafte Eingaben zurückgewiesen bzw. automatisch verbessert
werden. Benutzen Sie vorläufig die Umgangssprache.

Dr. Harald Bobeth 19.10.2011 Seite 4/25


MERIAN-SCHULE FREIBURG
Bioinformatik

2.5 Ablaufsplanung

Bei der Lösung größerer Aufgaben ist es zweckmäßig, sich den Ablauf vorab genau zu
überlegen und dies zu dokumentieren. Man kann den Ablaufsplan in der Umgangssprache
formulieren. Es gibt aber auch mehrere genormte Programmablaufspläne

Internet:

http://de.wikipedia.org/wiki/Programmablaufplan
http://de.wikipedia.org/wiki/Nassi-Shneiderman-Diagramm

Im Ordner „NSD“ ist ein Programm abgespeichert, mit dem man NSD-Diagramme auf
einfach Weise erstellen kann (siehe: NSD-Editor Kurzanleitung).

Das Diagramm kann in die Skriptsprache C umgewandelt werden und von dort leicht als Perl-
Skript verändert werden.

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 5/25


MERIAN-SCHULE FREIBURG
Bioinformatik

3. Perl – Kontrollstrukturen

3.1 Bedingungen, Alternativen

Analysieren Sie das Skript Bedingung.pl.


 Notieren Sie sich die Besonderheiten der Syntax..
(der Vergleichsoperator „eq“ entspricht „ist gleich“. )
 Stellen Sie die Skriptzeilen als Programmentwurf dar.
 Überlegen Sie sich 3 Beispiele, wo dieser Skriptabschnitt eingesetzt werden könnte.

Im Skript if-if_statt_if-elsif.pl können Sie sehen, wie die if-Anweisung falsch eingesetzt ist.

Programmier-Aufgabe:

Verbessern Sie das Skript RNA_in_DNA.pl, so dass fehlerhafte Eingaben zurückgewiesen


bzw. automatisch verbessert werden. Benennen Sie das verbesserte Skript
RNA_in_DNA_2.pl.
 Skizzieren Sie einen Programmentwurf.
 Welche Eingaben können automatisch verbessert werden?
 Welche Eingaben müssen zurückgewiesen werden?

3.2 While-Schleifen, Do_until-Schleifen

Analysieren Sie die Skripts Schleifen1.pl und Schleifen2.pl.


 Welche Schleife ist Kopf, welche fußgesteuert?
 Ersetzen Sie $text = „ja“ mit $text = „nein“ und überprüfen Sie das unterschiedliche
Verhalten der beiden Schleifen.
 Überlegen Sie sich Einsatzmöglichkeiten und schreiben Sie ein neues Skript.
 Skizzieren Sie dazu einen Programmentwurf.

3.3 For-Schleife

Wenn man weiß, wie oft eine Schleife durchlaufen werden muss, wählt man gern die sog.
„For-Schleife“.

Beispiel: Bilde die Fakultät einer vorgegebenen Zahl n.

n! = 1*2*3*.........n.

Die Syntax der For-Schleife lautet:

Dr. Harald Bobeth 19.10.2011 Seite 6/25


MERIAN-SCHULE FREIBURG
Bioinformatik

for($i = 1;$i <= 10;$i++) {


print "$i\n";
}

Hierbei ist $i ein Zähler, der im Beispiel den Anfangswert 1 hat.. Der Anweisungsblock, der n
mal durchlaufen wird, steht in geschweiften Klammern {}. „<=“ bedeutet „kleiner gleich“.
Hier könnte auch ein anderer Vergleichsoperator stehen. „$i++“ ist die Laufweite. Sie
bedeutet, dass bei jedem Durchgang der Zähler um 1 erhöht wird. Man könnte diese Angabe
auch weglassen. Dann müsste im Anweisungsblock stehen: „$i = $i+1;“.

Schreiben Sie ein Skript, das einen beliebigen Fakultätswert berechnet.

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 7/25


MERIAN-SCHULE FREIBURG
Bioinformatik

4. Perl – Variablen

Variablen sind „Platzhalter“ oder „Behälter“, der eine oder mehrere Werte enthält. Diese
Werte können verändert werden. Im Gegensatz zu vielen anderen Programmiersprachen
müssen die Variablen nicht vor Beginn eines Programms deklariert werden. Variablennamen
sind case-sensitiv, d.h. es wird ein Unterschied zwischen Groß- und Kleinschreibung
gemacht.

4.1 Skalare Variablen

Skalare Variablen sind Variablen, die nur einen Wert, eine Zahl oder einen String
(Zeichenkette) beinhalten. Skalare Variablen werden durch ein vorgesetztes $-Zeichen
gekennzeichnet. In Perl wird kein Unterschied zwischen einer Zahlen- und einer String-
Variablen gemacht.

4.2 Arrays

Mehrere skalare Variablen können zu einer Liste zusammengefasst werden. Eine solche
eindimensionale Liste nennt man „Array“. Ein Array ist durch ein vorgesetzes @-Zeichen
gekennzeichnet. Die Elemente des Array werden beginnend mit „0“ durchnummeriert..

Analysieren Sie das Skript arrays.pl.


 Wie wird ein Array deklariert?
 Merken Sie sich (schriftlich) vor, welche Array-Manipulationen es gibt. Schauen Sie
sich später bei Bedarf die einzelnen Anweisungen genauer an.

4.3 Hashes

Ein Hash ist eine besondere Liste, eine sog assoziative Liste. In dieser Liste sind die Elemente
nicht geordnet. Jedem „Schlüssel“ ist ein Wert zugeordnet. Hashes werden durch ein
vorangestelltes %-Zeichen gekennzeichnet. Sie sind eine Besonderheit der
Programmiersprache Perl.

Analysieren Sie das Skript hashes.pl.


 Wie wird einHash deklariert?
 Merken Sie sich (schriftlich) vor, welche Hash-Manipulationen es gibt. Schauen Sie
sich später bei Bedarf die einzelnen Anweisungen genauer an.

Programmier-Aufgaben:

1. Im Text „Variablen.doc“ ist tabellarisch dargestellt, was Skalare, Arrays und Hashes sind.
Schreiben Sie ein Skript, in dem Sie selbst mit diesen Variablen ausprobieren, was man
mit ihnen alles machen kann.

Dr. Harald Bobeth 19.10.2011 Seite 8/25


MERIAN-SCHULE FREIBURG
Bioinformatik

2. Schreiben Sie ein kleines Vokabeltrainingsprogramm:

 Geben Sie eine Liste aus 10 Elementen vor.


 Der Computer soll zufällig ein Wort aussuchen.
 Der Benutzer gibt das entsprechende Wort der anderen Sprache ein.
 Der Computer sagt, ob die Antwort richtig oder falsch ist.

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 9/25


MERIAN-SCHULE FREIBURG
Bioinformatik

5. Perl – Filehandles

Perl lebt natürlich davon, dass man Dateien (files) ausliest bzw. Ergebnisse in Dateien
schreibt. Folgende „Handlings“ werden immer wieder benötigt:

• Lesen einer Datei: Datei_Lesen.pl


• Schreiben einer Datei: Datei_(Ueber-)Schreiben.pl
• Anhangen von Daten in eine bestehende Datei: Datei_Schreiben_hinten_anhaengen.pl

Öffnen Sie die entsprechenden Skripts, führen Sie die Programme aus und kontrollieren Sie
mit dem normalen Editor die *.txt-Dateien vor und nach der Manipulation.

Die Bezeichnungen EINGABE, AUSGABE, ANHANG sind Variablennamen für ein sog.
Filehandle. Sie werden meist in Großbuchstaben geschrieben. Die Namen können
vollkommen willkürlich gewählt werden. Man könnte jedes Mal ebenso gut
„WARZENSCHWEIN“ schreiben. Die Namen können aber über ihre Bedeutung erklären,
was mit der Datei gemacht wird. Dadurch wird das Programm verständlicher.

Programmier-Aufgabe:

Suchen Sie im Internet die Aminosäurensequenzen Cytochrom c von drei verschiedenen


Primaten und speichern Sie die drei Sequenzen jeweils im FASTA-Format ab. Beachten Sie,
dass die letzte Zeile mit einem Zeilenumbruchzeichen abgeschlossen ist.

Schreiben Sie ein Programm, das folgende Aufgaben erfüllt:

Die FASTA-Dateien werden getrennt eingelesen und ihr Inhalt auf dem Bildschirm
ausgegeben. Anschließend werden die drei Dateien zu einer Datei vereinigt und diese unter
dem Namen Primaten.fas abgespeichert.

Achtung: Die Datei „Primaten.fas“ muss beim Testen des Programms wieder gelöscht
werden. Sonst wird alles immer wieder angehängt.

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 10/25


MERIAN-SCHULE FREIBURG
Bioinformatik

6. Perl – Pattern Matching und reguläre Ausdrücke

Ein regulärer Ausdruck ist ein Muster, das in einer Zeichenkette gesucht wird. Man sucht also
weniger nach einer genau vorgegebenen Zeichenkette, obwohl dies auch geht. Vielmehr kann
man Zeichenketten suchen, ohne die einzelnen Zeichen zu kennen, die vorkommen können. .
Eine Mustersuche (pattern matching) wäre beispielsweise eine Suche nach deutschen
Sonderzeichen oder irgendeine Schreibweise des Namens Meier/Meyer/Maier/Mayer.
Reguläre Ausdrücke gehen also weit über das hinaus, was z.B. WORD mit Suchen oder
Ersetzen vermag.
Die Verwendung von regulären Ausdrücken ist eine besondere Stärke von Perl, allerdings
auch die schwierigste Seite von Perl.

Beispiele:

• Suche nach allen Zugriffsnummern in einer FASTA-Datei


• Suche nach allen gültigen Email-Adressen in einem Text
• Suche nach allen Links in einem Text

Aufgabe:

Überlegen Sie sich, wie eine gültige Email-Adresse aufgebaut sein kann und wie der
Suchalgorithmus (in der Umgangssprache) lauten könnte.

Diesen Algorithmus ohne Verwendung von regulären Ausdrücken in ein Programm


umzusetzen, verlangt eine aufwändige Programmierung mit vielen Abfragen. Kürzer geht es
so: $Email =~ ^[A-Z\d_.-]+\@([A-Z_}d.-]+\.)+[A-Z]+$

Aber leider ist dieser Ausdruck auf dem ersten Blick nicht zu verstehen.

Wiederholung

Im Programm Ersetzen.pl sind zwei verschiedene Formen des Ersetzens vorgestellt. Erklären
Sie den Unterschied zwischen den beiden Formen.

In diesem Programm kommt bereits der sog. Match-Operator / / vor. Was zwischen den
beiden Schrägstrichen steht, ist das Muster. Der Operator =~ gibt an, in welchem String das
Muster gesucht bzw. ersetzt werden soll. Das „s“ bedeutet „substitute“. Dann kommt noch ein
weiterer slash dazu.

Reguläre Ausdrücke werden ebenfalls zwischen den / / gesetzt. Sie haben im Allgemeinen die
Form: $Text =~ /regulärer Ausdruck/Option.
Hier wird das Muster, das im regulären Ausdruck steht in $Text gesucht. Wird es gefunden,
ist das Ergebnis wahr, sonst falsch. Die Option kann weggelassen werden. Dazu später. Der
reguläre Ausdruck kann auch Variablennamen enthalten.

Dr. Harald Bobeth 19.10.2011 Seite 11/25


MERIAN-SCHULE FREIBURG
Bioinformatik

6.1 Exakt vorgegebenes Muster

Im Programm reg_exakt.pl wird exakt ein vorgegebenes Muster gesucht. Probieren Sie
mehrere Eingaben durch.
Hinweis: Hier handelt es sich zwar um ein Pattern Matching, aber das Muster ist noch kein
regulärer Ausdruck.

6.2 Muster mit mehreren Möglichkeiten

Im Programm reg_abc.pl wird auf verschieden mögliche Schreibweisen abgefragt.


Die Bedeutung des regulären Ausdrucks /M[ae][iy]er/ lautet:
Erster Buchstabe ein „M“ dann entweder ein „a“ oder ein „e“ dann entweder eine „i“ oder
eine „y“ und zum Schluss „er“.

In der eckigen Klammer steht also eine Auswahl von Zeichen, die zum Treffer führen, wenn
sie vorkommen.

Programmier-Aufgaben:

1. Schreiben Sie ein Skript, das entscheidet, ob in einem Text nur Buchstaben oder nur
Ziffern vorkommen.
Hilfe: statt alle Zeichen vorzugeben kann man auch einen Bindstrichwählen: [0-9] statt
[0123456789]

2. Schreiben Sie ein Skript, das entscheidet, ob in einem Text deutsche Sonderzeichen
(ä,ö,ü,?) vorkommen.

3. Schreiben Sie ein Skript, das entscheidet, ob in einer Nukleotidsequenz ein Startcodon
(ATG) vorkommt.

4. Schreiben Sie ein Skript, das entscheidet, ob in einer Nukleotidsequenz Stoppcodons


vorkommen.

5. Schreiben Sie ein Skript, das entscheidet, ob eine Sequenz aus einer DNA oder einer
RNA vorliegt.

6. Schreiben Sie ein Skript, das feststellt, ob in einer gegebenen Nukleotidkette die
Schnittstelle des Restriktionsenzyms EcoI vorkommt.

Dr. Harald Bobeth 19.10.2011 Seite 12/25


MERIAN-SCHULE FREIBURG
Bioinformatik

6.3 Bedeutung einiger Sonderzeichen und zeichenklassen in regulären Ausdrücken

In regulären Ausdrücken haben folgende Sonderzeichen eine spezielle Bedeutung: .+*?^$


()[]{}|\
Will man nach diesen Zeichen suchen, muss man ihnen einen backslash \ vorsetzen, damit das
Zeichen als solches und nicht als spezielle Funktion erkannt wird.

. steht für irgendein Zeichen


^ das nachfolgende Zeichen steht am Anfang
$ das vorangegangene Zeichen steht am Ende
+ das vorangegangene Zeichen kommt mindestens einmal vor
* das vorangegangene Zeichen kann beliebig oft oder gar nicht vorkommen
{n} das vorangegangene Zeichen kommt n mal hintereinander vor
{n,} das vorangegangene Zeichen kommt mindestens n mal hintereinander vor

besondere Zeichenklassen:

\w alle alphanumerischen Zeichen (i.R. nicht deutsche Sonderzeichen)


\d alle Ziffern

Experimentieren Sie mit dem Skript reg_ueb.pl.

Analysieren Sie das Skript reg_Bsp_einfach.pl


 Spielen Sie mehrere Eingaben durch.
 Übersetzen Sie das Muster in die deutsche Umgangssprache.
 Experimentieren Sie mit dem Muster.

Programmier-Aufgaben:

1. Schreiben Sie ein Programm, das überprüft, ob eine Eingabe eine natürliche Zahl ist.
2. Schreiben Sie ein Programm, das feststellt, ob die Eingabe eine ganze Zahl, eine
Gleitkommazahl oder etwas anderes ist.
3. Schreiben Sie ein Programm, das feststellt, ob es sich bei der Eingabe einer Zahl um eine
duale Zahl handeln könnte.

Dr. Harald Bobeth 19.10.2011 Seite 13/25


MERIAN-SCHULE FREIBURG
Bioinformatik

6.4 Spezielle Variablen

Die bisherigen Beispiele der Mustersuche zeigten nur, ob eine bestimmte Zeichenfolge zum
Muster passend gefunden wurde oder nicht. Natürlich möchte man auch wissen, was
gefunden wurde oder an welcher Stelle in der Zeichenfolge das Muster gefunden wurde. Dies
lässt sich mit speziellen Variablen verwirklichen.

$&: Variable für das gefundene Gesamtmuster


$1, $2 usw.: Variablen für die Muster in der 1., 2. usw. Klammer
$`: Variable für die Zeichenkette vor dem gefundenen Muster
$’: Variable für die Zeichenkette nach dem gefundenen Muster

Ein Skriptbeispiel ist reg_aus.pl.

Programmier-Aufgabe

Schreiben Sie ein Skript, das in einer gegebenen Nukleotidsequenz die Nukleotidsequenz
zwischen dem Startcodon und dem ersten Stopcodon ausgibt.
Hilfe: Startcodon: ATG, Stopcodons: TAA, TAG, TGA
Das Zeichen | innerhalb eines regulären Ausdruck steht für „oder“

In der Aufgabenstellung liegt ein Gedankenfehler vor. Deshalb ist das Ergebnis nicht
unbedingt brauchbar. Geben Sie eine Erklärung.

Verbessern Sie Ihr Skript.

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 14/25


MERIAN-SCHULE FREIBURG
Bioinformatik

ANHANG

A: Perl – Software

Perl

Perl ist eine interpretierende Programmiersprache, d.h. nach jedem Aufruf des geschriebenen
Perl-Programms muss das Skript in eine vom Computer verständliche Sprache übersetzt
werden. Larry Wall hat den Perl-Interpreter kostenlos zur Verfügung gestellt. Es ist im
Internet abrufbar und wird auch dauernd verbessert.

Download von Perl für WINDOWS: www.activestate.com und dann download von
ActivePerl 5.6

Installation: Nach dem Download wird die Installation mit Aufrufen der Datei gestartet. Die
Installation verläuft, wie man es bei anderen Installationn gewohnt ist.

Editor

Die Perlprogramme können mit jedem ASCII-Editor, also auch dem Texteditor von
WINDOWS, geschrieben werden. Hilfreich sind aber spezielle Perl-Editoren, die das Skript
übersichtlich gestalten. Damit wird eine Fehlersuche erleichtert.

Beispiel: DzSoft-Perl-Editor. Dieser kann in der unregsistrierten Form (Trial-Version)


kostenlos aus dem Internet heruntergeladen werden: www.dzsoft.com

Dass die Trial-Version auf 120 Zeilen beschränkt ist, spielt für einen Anfänger in der Perl-
Programmierung keine Rolle, da er kaum so lange Programme schreiben wird.

Tutorials

Im Internet gibt es eine Reihe von Tutorials, mit denen man die Sprache im Selbststudium
erlernen kann. Beispiele im Anhang D

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 15/25


MERIAN-SCHULE FREIBURG
Bioinformatik

B: Skalare, Arrays und Hashes

Skalar Array
$Name[0] = „Mozart“
$Name[1] = „Beethoven“
$Name[2] = „Bach“
$Name[3] = „Armstrong“
$Name[4] = „Picasso“
$Name[5] = „Dürer“
@Name
$Name[6] = „Merian“
$Name[7] = „Friedrich“
$Name[8] = „Darwin“
$Name[9] = „Bohr“
$Name[10] = „Staudinger“
$Name[11] = „Watson“

Skalar Array
$Vorname[0] = „Wolfgang Amadeus“
$Vorname[1] = „Ludwig van“
$Vorname[2] = „Johann Sebastian“
$Vorname[3] = „Louis“
$Vorname[4] = „Pablo“
$Vorname[5] = „Albrecht“
@Vorname
$Vorname[6] = „Maria Sibylla “
$Vorname[7] = „Caspar David“
$Vorname[8] = „Charles“
$Vorname[9] = „Niels“
$Vorname[10] = „Hermann“
$Vorname[11] = „James“

Schlüssel (key) Wert (value) Hash


$Name[0] = „Mozart“ $Beruf[0] = „Musiker“
$Name[1] = „Beethoven“ $Beruf[1] = „Musiker“
$Name[2] = „Bach“ $Beruf[2] = „Musiker“
$Name[3] = „Armstrong“ $Beruf[3] = „Musiker“
$Name[4] = „Picasso“ $Beruf[4] = „Maler“
$Name[5] = „Dürer“ $Beruf[5] = „Maler“
%Beruehmte
$Name[6] = „Merian“ $Beruf[6] = „Maler“
$Name[7] = „Friedrich“ $Beruf[7] = „Maler“
$Name[8] = „Darwin“ $Beruf[8] = „Naturwissenschaftler“
$Name[9] = „Bohr“ $Beruf[9] = „Naturwissenschaftler“
$Name[10] = „Staudinger“ $Beruf[10] = „Naturwissenschaftler“
$Name[11] = „Watson“ $Beruf[11] = „ Naturwissenschaftler“

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 16/25


MERIAN-SCHULE FREIBURG
Bioinformatik

C: Nützliche Perl-Skripts
Zufallszahlen

Mit den Funktionen rand() und int($zahl) lassen sich Zufallszahlen erzeugen.

rand(): $zahl = rand(); Gibt Zufallszahlen zwischen 0 und 1 aus.


rand(n): $zahl = rand(n); Gibt Zufallszahlen zwischen 0 und n aus

Hinweis: Die rand-Funktion erzeugt keine echten Zufallszahlen, sondern berechnet


diese nach einem bestimmten Algorithmus. Hierzu verwendet er intern einen
Initialsisierungswert, der aus der aktuellen Zeit, der Prozess-ID und weiterer
Zufallskomponenten bestimmt wird.
Die Zufallszahl ist eine Gleitkommazahl. Will man natürliche Zahlen, so setzt man die
INT-Funktion ein:

Zufallszahlen 1-2: $zahl = int(rand()*2)+1 oder $zahl = int(rand(2))+1


Zufallszahlen 1-49: $zahl = int(rand()*49)+1 oder $zahl = int(rand(49))+1

Mit der Funktion srand($Zahl) kann der Benutzer den Initialisierungswert vorgeben.
Dann wird immer die gleiche Folge von „Zufallszahlen ermittelt.
Link: http://www.farid-hajji.net/books/de/Hajji_Farid/pbv2/numbers.html

Aufgabe: Der Computer soll einen Würfel simulieren.

Modulo

Bei der Division zweier ganzer Zahlen mit dem Operator „%“ ($zahl3 = $zahl1 %
$zahl2) wird zurückgegeben, was als Rest bleibt.
Beispiele (in Worten ausgesprochen): 7 modulo 2 ist gleich 1 oder 7 modulo 4 ist gleich
3.
Mit dieser Funktion kann man beispielsweise überprüfen ob eine Zahl durch eine andere
Zahl teilbat ist. In diesem Fall gilt: $zahl3 == 0.

Aufgabe: Der Computer soll feststellen ob eine eingegebene Zahl eine Primzahl ist.
Hinweis: Wählen Sie zunächst kleine Zahlen.

Zeitfunktion

Die Funktion time() gibt an, wie viel Sekunden seit dem 1.1.1970 00.00 Uhr GMT
verstrichen sind. Diese zahl kann einer skalaren Variablen übergeben werden.

Aufgabe: Der Computer soll als Stopp-Uhr funktionieren.

Dr. Harald Bobeth 19.10.2011 Seite 17/25


MERIAN-SCHULE FREIBURG
Bioinformatik

Datum

Zum Ermitteln des aktuellen Datums gibt es die Funktion localtime(). Eine gute
Beschreibung liefert folgende Internetadresse:
http://www.infos24.de/perle/handbuch/24_datum_ermitteln.htm

Aufgabe: Nach Eingabe des Geburtsdatums soll das Alter automatisch ermittelt werden.

Vervielfältigkeitsoerator x

Mit diesem Operator lässt sich ein String (oder einzelnes Zeichen) n mal vervielfältigen.
$s = „abc“;
$v = $s x 5 ergibt: abcabcabcabcabc

Funktionen für Verzeichnisse/Ordner

Das Skript Verzeichnis_lesen.pl zeigt, wie die Dateien eines Verzeichnisses/Ordners


aufgelistet werden können.

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 18/25


MERIAN-SCHULE FREIBURG
Bioinformatik

D: Perl – Übungsaufgaben

Man muss das Rad nicht immer von neuem erfinden. Suchen Sie deshalb in den bereits
besprochenen Skripts nach Teillösungen. Kopieren Sie die entsprechenden Skriptabschnitte in
Ihr neues Skript und ändern Sie die Abschnitte nach Ihren Bedürfnissen um. Versehen Sie
Ihre Skripte mit Kommentaren und gliedern Sie die Skripte durch Einrückungen. Denken Sie
daran, dass eine Ablaufsplanung helfen kann, wenn es überhaupt nicht weiteregeht.

Schwierigkeitsgrade:

l: leicht
m: mittel
s: schwer
u: umfangreich

Eingaben – Ausgaben

io_1 l Schreiben Sie ein Skript, das folgende Anforderungen erfüllt:

Auf dem Bildschirm erscheinen nacheinander folgende Textzeilen:


Bitte geben deinen Vornamen ein:
_
und auch deinen Nachnamen
_
Nach der Eingabe des Vor- und Nachnamens soll auf dem Bildschirm folgender
Text erscheinen (z.B.):
Hallo, Harald Bobeth. Das hast du gut gemacht!

Berechnungen

b_1 l Schreiben Sie ein Skript, das folgende Anforderungen erfüllt:

Nach Aufforderung auf dem Bildschirm, gibt der Anwender eine Zahl ein. Das
Programm berechnet dazu die dritte Potenz der Zahl, die Quadratwurzel der Zahl,
den Zehnerlogarithmus der Zahl und gibt das Ergebnis mit einer entsprechenden
Textaussage auf dem Bildschirm aus.

b_2 l Berechnung von Flächen und Umfang

Schreiben Sie ein Skript, das folgende Anforderungen erfüllt:

Nach Aufforderung auf dem Bildschirm gibt der Anwender die entsprechenden
Zahlen ein. Das Programm berechnet den Umfang und die Fläche eines Rechtecks
(eines Kreises) und gibt die entsprechenden Angaben auf dem Bildschirm aus.

Dr. Harald Bobeth 19.10.2011 Seite 19/25


MERIAN-SCHULE FREIBURG
Bioinformatik

b_3 l Währungsumrechnungen

Schreiben Sie ein Skript, das folgende Anforderungen erfüllt:

Nach Aufforderung auf dem Bildschirm gibt der Anwender einen Eurobetrag ein.
Das Programm rechnet um, wie viel Dollar diesem Betrag entspricht und gibt dies
auf dem Bildschirm aus.

Textmanipulationen

t_1 l Schreiben Sie ein Skript, das folgende Anforderungen erfüllt:

Nach Aufforderung auf dem Bildschirm gibt der Anwender seinen Vor- und
Nachnamen ein. Das Programm gibt auf dem Bildschirm das Namenskürzel aus.
Dieses besteht aus dem ersten Buchstaben des Vornamens und den ersten drei
Buchstaben des Nachnamens.
Beispiel: Hallo Harald, dein Namenskuerzel ist „HBob“.

l Die Nukleotide einer Sequenz sollen in Dreierblöcken, die durch ein Leerzeichen
getrennt sind dargestellt werden.

l Lassen Sie ein eingegebenes Wort vertikal auf dem Bildschirm ausgeben.

t_2 m Nach Aufforderung gibt der Benutzer seinen Geburtstag nach folgender Form ein:
dd.MM.yyyy.

Auf dem Bildschirm wird ausgegeben, wie alt der Benutzer ist.

t_3 m Numerische Variable – Stringvariable

In Perl wird im Gegensatz zu vielen anderen Programmiersprachen bei den


skalaren Variablen nicht unterschieden, ob es sich um eine numerische oder um
eine String-Variable handelt. Die entsprechende Zuordnung ergibt sich in der
Regel aus dem Kontext des Programms.
Gegeben sind die skaleren Konstanten $K1 = „17“ und $K2 = „23“. Beide werden
auf verschiedene Weise verknüpft:
$v1 = $K1 + $K2
$v2 = $K1.$K2
Was ist der Unterschied zwischen beiden Verknüpfungen? Äußern Sie zunächst
Ihre Vermutung. Überprüfen Sie Ihre Vermutung durch ein geeignetes Programm.

Dr. Harald Bobeth 19.10.2011 Seite 20/25


MERIAN-SCHULE FREIBURG
Bioinformatik

Bedingungen, Alternativen

if_1 l Der Benutzer gibt seinen Vornamen und sein Geschlecht (w, m) ein. Auf dem
Bildschirm steht als Begrüßungsformel:

Guten Tag liebe(r) Vorname.

if_2 m Der Benutzer gibt eine Aminosäuresequenz im Einbuchstabencode ein. Der


Computer gibt am Bildschirm aus, ob es sich um ein Dipetid, ein Tripeptid, ein
Oligopeptid (bis 20 AS), ein Polypeptid oder ein Proteine (> 100 AS) handelt.

if_3 l Vergleich zweier Sequenzen auf Identität

Gegeben sind die Sequenzen:


$Seq1 = ’ATGCTTGCATGGATCCGGGTAAATTGCTCCTCTGA’
$Seq2 = ’ATGCTTGCATGGATCCGGGTAAATTGGTCCTCTGA’
$Seq3 = ’ATGCTTGCATGGATCCGGGTAAATTGCTCCTCTGA’
Schreiben Sie ein Programm, das herausfindet, ob die Seq2 bzw. die Seq3 mit der
Seq1 identisch ist.

if_4 m Schreiben Sie eine Rechenübungsprogramm, das folgende Leistungen aufzeigt:

Der Computer gibt zwei Zufallszahlen und die Rechenart auf dem Bildschirm aus.
Der Benutzer gibt eine Antwort ein. Der Computer gibt aus, ob die Antwort richtig
oder falsch ist und gibt im letzten Fall die richtige Antwort aus.

Erweiterung:

 Der Computer gibt erst nach der zweiten falschen Antwort auf die gleiche
Rchenaufgabe die richtige Antwort aus.
 Der Benutzer gibt vor, bis zu welcher maximalen Zahl die Übung
vorgenommen werden soll.
 Der Benutzer gibt die Rechenart vor.

Schleifen

s_1 l Σ n
Lassen Sie die Summe der Zahlen 1 + 2 + ….+ n ausrechnen.

s_2 l Berechnen Sie die Fibonacci-Folge bis zu einer vorgegebenen Zahl.

s_3 u Das Rechenübungsprogramm soll erweitert werden:

Der Benutzer gibt die Rechenart und die Anzahl an gewünschten Übungen ein. Der
Computer gibt am Ende zusätzlich aus, wie hoch der Prozentsatz richtiger Antworten ist.

Dr. Harald Bobeth 19.10.2011 Seite 21/25


MERIAN-SCHULE FREIBURG
Bioinformatik

if l Der Anwender soll eine natürliche Zahl < 5 eingeben. Der Computer soll dann die 3.
Potenz zu dieser Zahl auf dem Bildschirm ausgeben. Ist die eingegebene Zahl >= 5, soll
er eine entsprechende Fehlermeldung ausgeben und eine erneute Zahleneingabe
abwarten. Bei korrekter Zahleneingabe soll am Schluss das Wort „ENDE“ auf dem
Bildschirm erscheinen.

if m Der Anwender soll eine positive Zahl eingeben. Der Computer soll dann die
Quadratwurzel dieser Zahl auf dem Bildschirm ausgeben. Die entsprechende Funktion
lautet: $x = sqrt($y). Bei Eingabe einer negativen Zahl soll der Computer eine
entsprechende Fehlermeldung ausgeben und eine erneute Zahleneingabe abwarten. Bei
korrekter Zahleneingabe soll das Wort „ENDE“ auf dem Bildschirm erscheinen.

s_5 m Es soll ein Passwort eingegeben werden, das mindesten 8 Zeichen lang ist. Ist diese
Bedingung nicht erfüllt, soll der Computer das Passwort mit einer entsprechenden
Fehlermeldung zurückweisen und auf eine erneute Passworteingabe warten. Hat das
Passwort die notwendige Länge, soll auf dem Bildschirm das Wort „LOGIN“
erscheinen. Nach 10 falschen Eingaben soll abgebrochen werden.

s_4 l Der Anwender soll ein neues Passwort beliebiger Länge generieren. Nach Eingabe des
Passwortes soll er es zur Überprüfung erneut eingeben. Stimmen beide Eingaben
Überein, soll auf dem Bildschirm stehen: Neues Passwort angenommen. Stimmen die
Eingaben nicht überein, soll der ganze Vorgang wiederholt werden. Nach 10 falschen
Eingaben soll abgebrochen werden.

m Primzahlen

Geben Sie eine natürliche Zahl als obere Grenze an und lassen Sie den Computer alle
Primzahlen bis zu dieser Grenze berechnen.

s_6 s Gegeben sind die beiden alignierten DNA-Sequenzen.


$S1=
„TTTGTTCCCTAAATAGGGACTTGTATGAACGGCCACAAGAGGGCTTTACTGTCTCTTACTTCCAATCCGTGAAATTGACCTTCCCGTG
AAGAGGCGGGAATATAATAATAAGACGAGAAGACCCTATGGAGCTTTAATTAACCGACCCAAAGAGACCATATGAAC-
CAACCGACAGGAACAACAAACCTCTATATGGGCCGGCAATTTAGGTTGGGGTGACCTCGGAGAATAAAACAACCTCCGAGTGATTTAAA
TCTAGACTAACCAGTCGAAAGTACTACATCACTTATTGATCCAAAAACCTTGATCAACGGAACAAGTTACCCTAGGGATAACAGCGCAA
TCCTATTTCAGAGTCCATATCGACAATGAGG„

$S2 =
„TTTGTTCCCTAAATAGGGACTTGTATGAATGGCCACACGAGGGCTTTACTGTCTCTTACTTCCAATCCGTGAAATTGACCTTCCCGTG
AAGAGGCGGGAATACAACAATAAGACGAGAAGACCCTATGGAGCTTTAATTAACCGACCCAAAGAGACCCATCAATTTCAACCGACAGG
AACAACAAACCTCTGTATGGGCCGACAATTTAGGTTGGGGTGACCTCGGAGAACAGAACAACCTCCGAGTGATTTAAATCAAGACTAAC
CAGTCGAAAGTATTACATCACTTATTGATCCAAAAGTTTGATCAACGGAACAAGTTACCCTAGGGATAACAGCGCAATCCTATTTCAGA
GTCCATATCGACAAT-AGG„

Berechnen Sie den Score des Alignments. Match = 1, Mismatsch = 0, Gap = -4.

Die werte für Match, Mismatch und Gap sollen im Skript eingegeben sein.
s_7 s Gegeben ist eine Nukleotidsequenz. $S =
„TAAATCTAGCCCTACCAACCCTACACTCAATTCTCATATTATATTAAATCAA
AACATTCACTTACCAAAAAGTATAGGAGATAGAAATTTCACTAAGGCGCAA

Dr. Harald Bobeth 19.10.2011 Seite 22/25


MERIAN-SCHULE FREIBURG
Bioinformatik

TAGAGATAGTACCGCAAGGGAATGATGAAAGATAGTTTAATAGTAAAAAAT
AGCAAGGATTAACCCCTTTACCTTTTGCATAATGAATTAACTAGAAAAATCT
GACAAAGAGAACTATAGCCAGAAACCCCGAAATCAGACGAGCTATCTGATA
GTAATCCCCAGGATCAATTCATCTATGTGGCAAAATAGTGAAGAAACTTACA
GATAGAGGTGAAATACCAATCGAGCCTGATGATAGCTGGTTGTCCAGAAAT
AGAATTTTAGTTCTACCTAAAACTTACCACAAAAACAAAATAATTCCAATGT
AAGTTTTAGAGATATTCAAAAGGGGTACAGCTCTTTTGACCAAGGATACAAC
CTTGATTAGCGAGTAAATTCACCATTAATTTCATAGTTGGCTTAGAAGCAGC
CATCAATTAAGAAAGCGTTAAAGCTCAACAACCAACCAAACTAAAAAGATT
CCAAAATTAATTAATGATCTCCTAAACATAATACTGGACTAATCTATATAAA
TAGAAGAAATAATGTTAGTATAAGTAATAAGAAGTATTTCTCCCTGCATAAG
CTTATATCAGGTCGGATGCCCGCTGATAGTTAACAACCGAATAATTAAATAC
AAAAATAGAACCTTTATTATACCAATTGTTAACCCAACACAGGCATGCTTAA
GGGAAAGATTAAAAGAAGGAAAAGGAACTCGGCAAA“.

Berechnen Sie die prozentuale Häufigkeit der Nukleotide und stellen Sie dies
übersichtlich dar.

s_8 m Fehlerhaftes Skript analysieren und verbessern

Das Skript fehler.pl soll zählen, wie oft das Wort „ein“ in jeder Zeile einer Textdatei
vorkommt. Es findet zwar die gesuchten Wörter, zählt aber falsch. Verbessern Sie das
Programm.

s_9 m Zufallszahlen

Lassen Sie den Computer mindestens 1000 mal würfeln und prüfen Sie, ob die
gewürfelten Zahlen gleich verteilt sind.

s_10 s Die Variablen $sequenz beinhalte eine Nukleotidsequenz im FASTA-Format. Diese


Sequenz soll auf dem Bildschirm in 10er-Blöcken dargestellt werden. Jede Zeile soll 3
bzw. 4 Blöcke enthalten. Dies soll über eine Abfrage entschieden werden. Zu Beginn
jeder Zeile sollen über Ziffern die Positionen „von..bis“ notiert sein

Variablen

v_1 m In einner Liste (z.B. einer Zeugnisliste sollen die Ziffern durch das entsprechende
Zahlwort ersetzt werden.

Beispiel:

Deutsch: 2 Deutsch: gut


Chemie: 1 in Chemie: sehr gut
Sport: 3 Sport: befriedigend

Dr. Harald Bobeth 19.10.2011 Seite 23/25


MERIAN-SCHULE FREIBURG
Bioinformatik

v_2 m Zufallszahlen

Sie spielen gegen den Computer das Spiel „ Schere, Stein, Papier“. Schreiben Sie
ein entsprechendes Skript.

v_3 m Ein Benutzer gibt seinen Geburtstag in folgendem Format ein: 21.10.67.
Unter der Voraussetzung, dass der Benutzer im 20. Jahrhundert geboren wurde
soll das Datum in folgender Form ausgegeben werden: 31. Oktober 1967.

Datei-Handling

d_1 m In der Datei text1.txt ist ein kurzes Gedicht abgespeichert. Der Text soll
zeilenweise auf dem Bildschirm ausgegeben werden. Anschließend sollen die
einzelnen Zeilen des Gedichtes durchnummeriert werden, alles auf dem
Bildschirm ausgegeben und unter einem neuen Dateinamen abgespeichert werden.

d_2 m Die Datei „test1.fasta“ ist im FASTA-Format abgespeichert. Öffnen Sie die Datei,
entfernen Sie die erste Zeile und speichern Sie die reine Sequenz als „test1a.fata“
ab.
Hinweis: arrays.pl

Pattern Matching

p_1 m im Text, den Sie gerade lesen, beginnt jeder Satz mit einem kleinen Buchstaben.
verbessern sie den Text. das Perl-Programm soll für jeden Text geeignet sein. den
vorliegenden Text können Sie über Copy – Paste einer Variablen zuordnen.
ursprünglicher Text und verbesserter Text sollen auf dem Bildschirm zu lesen sein.

p_2

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 24/25


MERIAN-SCHULE FREIBURG
Bioinformatik

E: Internetadressen zu Perl

Zu Perl:

http://perl-seiten.bei.t-online.de/perl/perl_main.html
http://www.mathe2.uni-bayreuth.de/perl/inhalt.htm

http://www.ssw.uni-linz.ac.at/Teaching/Lectures/Sem/2000/Katzmayr/index.html
http://www.uni-kiel.de/rz/lehr/doku/perlkurs/
http://www.clug.de/vortraege/perl/perl-14-nov-1997.html
http://www.tekromancer.com/
http://www0.id.ethz.ch/Publikationen/Dokumentation/perl/index.html
http://www.cip.physik.uni-muenchen.de/~tf/perl/
http://www.uni-mainz.de/~pommeren/WWW-Kurs/Teil_III.html
http://de.wikipedia.org/wiki/Perl
http://userpage.fu-berlin.de/~corff/perl/perlkurs-1.html
http://www.inf.hs-zigr.de/~maetti01/?page=Studium/Perl
http://www.shadoware.de/computer/perl/
http://www.page-workshop.de/CGI-Perl/Tutorial/Start.htm
http://www.perlboard.de/perlguide/Inhalt.html
http://www.bergt.de/workshop/wolfdesign/html/cgi.htm

Zu Programmstrukturen

http://www.fh-meschede.de/public/willms/infoSkript/02/02_kontroll.pdf
http://hukla.prakinf.tu-ilmenau.de/Lehre/EP/Ws2000-01/Vor/vor.html

Inhalt

Dr. Harald Bobeth 19.10.2011 Seite 25/25