#!/usr/bin/perl # Programmname: Hash-und-Array.pl # # Implizit: $_ ist Standardskalar, wenn z.B. Skalar bei Befehl fehlt. # z.B.: print; ist gleichbedeutend mit print $_; # aber wirkt nicht auf $_ # @_ ist Standardarray, darin Unterprogrammliste # Arrays haben als Vorstellzeichen das At @ # Array koennen nur mit ganzen Zahlen (>=0) bzw. Skalaren die ganze Zahlen # enthalten indiziert werden. # Auf ein einzelnes Element eines Arrays wird zugegriffen, # indem der Index in eckicken Klammern gesetzt wird und # das @ durch $ ersetzt wird. # Array : @arfarben # Skalar: $arfarben[2] ist drittes Element des Array arfarben. # # Eine Liste besteht aus mehreren skalaren Variablen (natürlich sind auch # Zahlen und Strings erlaubt, sogar Arrays und Hashs), mit Kommas getrennt # und in runde Klammern eingeschlossen. # Achtung Arrays und Hashs sind gefraessig !!! Daher darf auf der linken # Seite einer Zuweisung nur ein Array oder Hash stehen und dieses dann # ganz rechts in der Liste! # # Hashs haben als Vorstellzeichen das Prozentzeichen % # Hash koennen mit Zahlen und Strings indiziert werden # Auf ein einzelnes Element eines Hash wird zugegriffen, # indem der Index in geschweiften Klammern gesetzt wird und # das % durch $ ersetzt wird. # Hash : %farben # Skalar: $farben{'rot'} ist der Skalar zum Index rot des Hash farben. # Achtung Arrays und Skalare in Doppelhochkommas werden im Print-Befehl # durch ihre Werte ersetzt. # Achtung Arrays und Skalare in Hochkommas werden im Print-Befehl # nicht durch ihre Werte ersetzt. # Achtung Hashs in Doppelhochkommas und auch in Hochkommas werden # im Print-Befehl nicht durch ihre Werte ersetzt. use strict; # alle Variablen #(Skalare, Arrays und Hashs) muessen definiert werden my %farben; # Hash my %farben2; my @arfarben; # Array my $anzahl; # Skalar bzw skalare Variable (=einfache Variable) my $i1; # Skalar my $i2; # Zuweisung von Werten an ein Hash %farben = ( rot => "#FF0000", gruen => "#00FF00" ); # z.B. 00FF00 ist Wert des Hash farben zum Index rot # nachfolgendes ist identisch: # Achtung die ungeraden Elemente sind die Indizes, die geraden die Werte %farben = ("rot","#FF0000","gruen","#00FF00"); print "$farben{qw(rot)}" . " das war die 1.-te\n"; print "$farben{'rot'}" . " das war die 2.-te\n"; print $farben{qw(rot)} . " das war die 3.-te\n"; print $farben{"rot"} . " das war die 4.-te\n"; # uebertragen eines Hash in ein Array @arfarben=%farben; # hiermit wird der Hash in ein Array uebertragen !!! # und zwar rot -> $arfarben [0] # und zwar #FF0000 -> $arfarben [1] # und zwar gruen -> $arfarben [2] # und zwar 00FF00 -> $arfarben [3] print "============== die einzelnen Elemente des Array arfarben:\n"; print $arfarben [0] . "\n"; print $arfarben [1] . "\n"; print $arfarben [2] . "\n"; print $arfarben [3] . "\n"; print "============== alle Elemente des Array arfarben:\n"; print "@arfarben" . "\n"; # Array koenen auch wie folgt gefuellt werden: @arfarben = (6,'blau',8,'ppplila'); print "============== nun das Array arfarben explizit gefuellt:\n"; print "@arfarben" ."\n"; # so geht es auch: $arfarben[0] = 7; $arfarben[1] = 'blaubblau'; $arfarben[2] = '9'; $arfarben[3] = 'lilalila'; print "@arfarben" ."\n"; print '============== Versuch das Hash %farben zu drucken' . "\n"; print "%farben" . "\n"; # die Hash Varible kann nicht # mit print in Doppelhochkomma gedruckt werden. # keine Ahnung warum nicht ???!!! print %farben; # nur alleine geht es !!! print "\n"; print "qqq" . %farben . "\n"; # so geht es auch nicht ???!!! # es ist im print Befehl ein Hash nur alleine erlaubt print '============== Versuch die Anzahl der Elemente des Hash %farben zu drucken' . "\n"; $anzahl=%farben; # so geht es nicht! print $anzahl . "\n"; # der Hash wurde ja in das Array arfarben uebertragen # Elementanzahl eines Arrays kann ermittelt werden $anzahl=@arfarben; # hiermit wird die Anzahl der Elemente des Arrays # nach $anzahl gebracht print "$anzahl" . "\n"; # nun in in anzahl die Anzahl der Elemente des # Arrays arfarben, in welchem die Elemente des # Hashs farben stehen # Beispiele fuer Listen: # Achtung: die Reihenfolge bei Zweisung einer Liste ist zufällig!!! # Ausser bei push und pop!!! print "============== Beispiele fuer Listen: \n"; @arfarben = (6,'blau',8,'ppplila'); %farben = ("5","gruen",@arfarben); print %farben; print "\n"; ($i1,$i2,%farben2)=(%farben , ("gelb","braun")); print $i1 . $i2 . "\n"; print %farben2; print "\n"; # Indizes bei Hashs holen: @arfarben = keys (%farben2); print "die Keys lauten: @arfarben \n"; @arfarben = sort (keys (%farben2)); print "die sortierten Keys lauten: @arfarben \n"; @arfarben = reverse sort keys %farben2; # Klammern können weg ! print "die absteigend sortierten Keys lauten: @arfarben \n"; print "\n"; print "arfarben: @arfarben \n"; print "farben2 vorm push: "; print %farben2; print "\n"; push (@arfarben, (%farben2, 'schwarz')); # bei push darf linkes Feld # kein Hash sein! print "farben2 nach push: "; # farben2 wurde durch push nicht geaendert print %farben2; print "\n"; print "arfarben nach push: @arfarben \n"; print "\n"; $i1 = pop (@arfarben); print "pop von arfarben: $i1 \n"; print "arfarben nach pop: @arfarben \n"; print "============== Beispiele fuer Skalare\n"; $i1=99; $i2=111; print $i1 . "\n"; print "$i1" . "\n"; print '$i1' . "\n"; # es wird der Text $i1 gedruckt, # da einfaches Hockomma vorliegt print $i1; print "\n"; print $i2; print "\n"; print $i1 . $i2 . "\n"; # das ist erlaubt print $i1 $i2; # das ist nicht erlaubt $i1=; # # nachfolgend vom print bis EOT ausschliesslich die Ausgabe des Programms: $i1=0; if ($i1 eq 1) { print <<"EOT"; #FF0000 das war die 1.-te #FF0000 das war die 2.-te #FF0000 das war die 3.-te #FF0000 das war die 4.-te ============== die einzelnen Elemente des Array arfarben: rot #FF0000 gruen #00FF00 ============== alle Elemente des Array arfarben: rot #FF0000 gruen #00FF00 ============== nun das Array arfarben explizit gefuellt: 6 blau 8 ppplila 7 blaubblau 9 lilalila ============== Versuch das Hash %farben zu drucken %farben rot#FF0000gruen#00FF00 qqq2/8 ============== Versuch die Anzahl der Elemente des Hash %farben zu drucken 2/8 4 ============== Beispiele fuer Listen: 8ppplila5gruen6blau 8ppplila gelbbraun5gruen6blau die Keys lauten: gelb 5 6 die sortierten Keys lauten: 5 6 gelb die absteigend sortierten Keys lauten: gelb 6 5 arfarben: gelb 6 5 farben2 vorm push: gelbbraun5gruen6blau farben2 nach push: gelbbraun5gruen6blau arfarben nach push: gelb 6 5 gelb braun 5 gruen 6 blau schwarz pop von arfarben: schwarz arfarben nach pop: gelb 6 5 gelb braun 5 gruen 6 blau ============== Beispiele fuer Skalare 99 99 $i1 99 111 99111 Can't use string ("99") as a symbol ref while "strict refs" in use at hash-und-a rray.pl line 157. EOT } #ende