# Programmablauf

- Start
- Einflußnahme auf Programm
- Ende

## Start

Der Perl-Code eines Programms ist zwar für einen (menschlichen) Programmierer mehr oder weniger gut lesbar, ein Mikroprozessor kann damit so aber nicht allzu viel anfangen. Daher muß der Code vor der Ausführung in die Sprache des Computers übersetzt bzw. kompiliert werden. Im Falle von Perl wird das komplette Programm unmittelbar vor der Ausführung in eine interne Form übersetzt. Treten dabei keine Fehler auf, arbeitet der Perl-Interpreter normalerweise die einzelnen Befehle Schritt für Schritt ab.

`#!/usr/local/bin/perl -w use strict; print "1\n"; print "2\n"; print "3\n";`

`1 2 3`

Mit Hilfe der speziellen Subroutine `BEGIN` kann Programmcode bereits in der Kompilierungsphase ausgeführt werden um Einfluß auf die Übersetzung des Rests des Programms zu nehmen. Mehrere `BEGIN`-Blöcke werden in der Reihenfolge des Auftretens abgearbeitet.

`#!/usr/local/bin/perl -w use strict; print "1\n"; print "2\n"; BEGIN { print "BEGIN 1\n" } print "3\n"; BEGIN { print "BEGIN 2\n" }`

`BEGIN 1 BEGIN 2 1 2 3`

[Seitenanfang]

## Einflußnahme auf Programm

Sogenannte Pragmas beeinflussen direkt die Übersetzung eines Perl-Programms. So sorgt etwa das immer empfehlenswerte `use strict` für eine strengere Kontrolle der verwendeten Variablen. Pragmas werden durch `use` aktiviert und durch `no` deaktiviert.

`#!/usr/local/bin/perl -w use strict; $v = 7; no strict; $w = 9;`

`Global symbol "$v" requires explicit package name at ./test.pl line 4. BEGIN not safe after errors--compilation aborted at ./test.pl line 6.`

Wie man an der Fehlermeldung erkennt, wird nur die Variable `$v` beanstandet, nicht aber `$w`.

Neben Pragmas, die den Perl-Interpreter direkt beeinflussen, kann man mit Hilfe von `use` auch Module einbinden, die zusätzliche Variablen und Funktionen bereitstellen. Wie Module funktionieren und selbst entwickelt werden können ist unter "Module" beschrieben.

Eine weitere Verwendungsmöglichkeit von `use` ist die Forderung nach einer bestimmten Mindestversion des Perl-Interpreters.

`#!/usr/local/bin/perl -w use strict; use 5.8.2; print "Nur ab Perl 5.8.2 lauffähig\n";`

Das obige Beispielprogramm läuft nur, wenn der verwendete Perl-Interpreter die Version 5.8.2 oder höher hat; ansonsten erfolgt eine Fehlermeldung.

[Seitenanfang]

## Ende

Nach dem Ausführen des letzten Kommandos beendet der Perl-Interpreter normalerweise automatisch die Arbeit. Analog zu `BEGIN` gibt es die spezielle Subroutine `END`, deren Inhalt nach den letzten Befehlen des Programmtextes aufgerufen wird. Existieren mehrere `END`-Blöcke, so werden sie in umgekehrter Reihenfolge abgearbeitet.

`#!/usr/local/bin/perl -w use strict; print "1\n"; print "2\n"; END { print "END 1\n" } print "3\n"; END { print "END 2\n" }`

`1 2 3 END 2 END 1`

Möchte man ein Programm an einer bestimmten Stelle gezielt beenden, so kann man hierfür die Funktion `exit()` verwenden. Gibt man kein Argument an, so wird die Zahl 0 angenommen, was für einen "erfolgreichen" Programmabbruch steht. Will man anzeigen, daß das frühe Programmende durch einen Fehler verursacht wurde, gibt man eine positive Zahl an. Die Verarbeitung dieses Wertes hängt allerdings vom Betriebssystem ab.

`#!/usr/local/bin/perl -w use strict; print "1\n"; print "2\n"; exit 0; print "3\n";`

`1 2`

Soll ein Programm bei Auftreten eines Fehlers kontrolliert beendet werden, so verwendet man besser die Funktion `die()`, bei der man einen Text angeben kann, der als Fehlermeldung ausgegeben wird.

`#!/usr/local/bin/perl -w use strict; die "Es ist ein Fehler aufgetreten."`

`Es ist ein Fehler aufgetreten. at ./test.pl line 5.`

Schließt man den Fehlertext mit einem Zeilenvorschub ("`\n`") ab, so unterbleibt die Ausgabe von Programmname und Zeilennummer.

[Seitenanfang]

Autor: Eike Grote | Version: 2.02 (30.5.2005)