1 Tagesüberblick 6 Lösung Hausaufgabe/Fragen Weitere besondere Variablen Hier-Dokument...

Post on 06-Apr-2015

106 views 0 download

transcript

1

Tagesüberblick 6

• Lösung Hausaufgabe/Fragen

• Weitere besondere Variablen

• Hier-Dokument

• Unterprogramme

2

Weitere besondere Variablen

@ARGV # enthält alle Argumente die an das

# Programm übergeben wurden.

%ENV # enthält die Variablen des Environ- # ments. Schlüssel sind die

Variablen-

# namen, diese weisen auf die Werte.

3

@ARGV

# Programm aufrufen mit: test.pl Ich bin ein Test

foreach $arg(@ARGV){

print "#$arg\n"}

# liefert:

#Ich

#bin

#ein

#Test

4

%ENV

print join(",",keys(%ENV));

# obiger Einzeiler könnte z. B. liefern

# WINBOOTDIR,TMP,PROMPT,TEMP, ...

# COMSPEC,CMDLINE,PATH,WINDIR, ...

# BLASTER

5

Hier-Dokument

#!perl -w$a=<<BLA;Ich bin ein Text,der in einem Hier-Dokument gespeichert ist.BLAprint $a;

6

Programmausgabe

Ich bin ein Text,

der in einem Hier-

Dokument gespeichert

ist.

7

Hier-Dokument mit Variablen

#!perl -w$b=1745;

print <<BLA;Ich bin ein Text, der in einem Hier-Dokument gespeichert und mit Variablen angereichert ist.Z. B. $b ist eine schoene Zahl.BLA

8

Programmausgabe

Ich bin ein Text, der in einem Hier-Dokument

gespeichert und mit Variablen angereichert ist.

Z. B. 1745 ist eine schoene Zahl.

9

Aufgabe 6-1

• Schreiben Sie ein Programm, dass Sie mit Namen als Parametern aufrufen können.

• Geben Sie für jeden Namen eine Zeile aus:Hallo Name

• Wenn kein Parameter angegeben wurde, geben Sie aus:Hallo Ihr da!

10

Aufgabe 6-2

• Fragen Sie vom Benutzer seinen Namen, und sein Geburtsdatum ab. Geben Sie anschließend aus:

Ihr Name ist: NameIhr Geburtsdatum ist: Geburtsdatum

• Benutzen Sie hierzu eine einzelne Printanweisung mit einem Hier-Dokument

11

Aufgabe 6-3

• Schreiben Sie ein Programm, daß alle Environment-Variablen, die als Argument übergeben wurden, mit ihren Werten ausgibt,.

• Anmerkung: Beachten Sie den Sonderfall, daß nichts übergeben wurde. Hier geben Sie alle Environment-Variablen mit ihren Werten aus.

• Beispiel:test.pl COMSPECCOMSPEC=C:\WINDOWS\COMMAND.COM

12

Unterprogramme

sub beispiel{

print "Ein primitives Unterprogramm\n";

}

&beispiel;

&beispiel(12);

&beispiel(1+3,"Text"); # Es gibt keine Probleme

# falls man mehr Argumente als nötig übergibt

13

Argumente

sub printargs{ # Beachte:

print "@_;"; # Die Liste @_ hat

} # nichts mit der Variablen

# $_ zu tun und ist lokal

&printargs; # zum Unterprogramm

&printargs(12);

&printargs(1+3,"Text");

# liefert: ;12;4 Text;

14

Einzelne Argumente

sub print2args{ # Auch die einzelnen

print "$_[0] $_[1]\n"; # Listenelemente

} # $_[n] haben nichts

# mit $_ zu tun.

&print2args;

&print2args(12);

&print2args(1+3,"Text");

15

Explizite Rückgabesub maximum{

if ($_[0] > $_[1]){

$a=$_[0];

}

else{

$a=$_[1];

} # Der Rückgabewert

return $a; # wird nach dem

} # return übergeben

print &maximum(14,27)

16

Rückgabewert dirtysub maximum{

if ($_[0] > $_[1]){

$_[0]; # Der Rückgabewert

} # ist der jeweils

else{ # letzte evaluierte Wert.

$_[1]; # Diese Form findet man

} # gelegentlich vor.

} # Keinesfalls benutzen

print &maximum(14,27)

17

Frage:sub maximum{

if ($_[0] > $_[1]){

$a=$_[0]}

else{

$a=$_[1]}

print "$a\n";

}

print &maximum(14,27)

# Was wird ausgegeben?

18

Ergebnis

27

1

# Warum kam das heraus?

19

Lokale Variablensub enthalten{

my ($a, $b); # lokale Variable def.

($a, $b)=($_[0],$_[1]); # zuweisen

$a =~ s/\s//g; # \ whitespace

$b =~ s/\s//g; # / entfernen

return ($a =~ /$b/ | $b =~ /$a/); # enthalten ?

}

($a, $b) = ("a b c-Dur","b c");

if (&enthalten($a,$b)){print "enthalten:\n$a\n$b"}

20

Ergebnis:

enthalten:

a b c-Dur

b c

Dies zeigt deutlich, daß die Variablen $a und $b

im Unterprogramm von denen im Hauptprogramm

verschieden sind, sonst wären alle Leerstellen

verschwunden. Um dies zu verdeutlichen

schreiben Sie ein # vor das my und testen dann.

21

my <-> local

my Variablen sind immer lokal zu dem

Block in dem sie definiert sind. my ist

vorzuziehen, da schneller und sicherer

local Variablen sind lokal zu dem Block in

dem sie definiert sind und in von diesem

aufgerufenen Unterprogrammen

( geht nicht mit use strict )

( War vor PERL 5 üblich )

22

Merke

• Die Variablen des Programms sind global wenn nichts anderes vorgegeben ist.

• Ans Unterprogramm übergebene Variablen können von diesem verändert werden.

• Um zu vermeiden, daß bei späteren Programm-weiterentwicklungen Kuddelmuddel auftritt sollte man alle im Unterprogramm verwendeten, nicht übergebenen Variablen lokalisieren.

23

use strict

use strict; # jetzt müssen alle Variablen vor Ihrer

# Benutzung definiert werden

use vars qw($bb); # Global bekannt

{

my $aa; # Lokal bekannt

$aa=$bb=1;

print "$aa # ";

&bla;

}

sub bla{ print ++$bb}

# liefert: 1 # 2

24

Rekursion

sub rec{

if ($_[0] < 10){ # Immer auf Abbruch

print $_[0]++,"\n"; # achten!

&rec($_[0]); # Falls noetig

} # Schleifenzaehler

} # mitführen

$a=0;

&rec($a);

25

Aufgabe 6-4

• Lesen Sie die Datei daten6-1.txt ein.

• Wandeln Sie alle Klein- in Großbuchstaben um.

– Tun Sie dies in einem Unterprogramm.

• Geben Sie die Zeilen zunächst im Unterprogramm in Großbuchstaben aus.

• Geben Sie die Zeilen anschließend im Hauptprogramm im Original aus.

26

Aufgabe 6-5

• Erweitern Sie die im Beispiel genannte Maximumfunktion durch Verwendung der Rekursion auf beliebig viele Zahlen.

27

Aufgabe 6-6

• Schreiben sie ein Unterprogramm zur Berechnung der Fakultät

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

28

Hausaufgabe 6-1

• Lesen Sie die Datei daten5-3.txt ein.

• Die Datei enthält in einer Zeile Name, Vorname, Geschlecht und Alter einer Person, jeweils durch Schrägstrich (/) getrennt.

• Ermitteln Sie für jede Person die Fakultät des Alters. Benutzen Sie hierzu ein Unterprogramm.

• Ermitteln Sie die Mittelwerte der Fakultäten jeweils nach Geschlecht getrennt und geben Sie aus.