{"id":69,"date":"2001-01-01T13:14:40","date_gmt":"2001-01-01T11:14:40","guid":{"rendered":"http:\/\/www.hermione.de\/blog\/?p=69"},"modified":"2008-02-21T23:38:59","modified_gmt":"2008-02-21T21:38:59","slug":"arrays-und-hashes-perl","status":"publish","type":"post","link":"http:\/\/blog.hermione.de\/?p=69","title":{"rendered":"arrays und hashes [perl]"},"content":{"rendered":"<h4>Array @liste<\/h4>\n<table class=\"rem\">\n<tr class=\"brem\">\n<th>$liste[-1]<\/th>\n<td>das letzte Element der Liste<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th>$#liste<\/th>\n<td>maximaler Index \/ Anzahl der Felder -1<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th>$anzahl = @liste<\/th>\n<td>Anzahl der Felder<\/td>\n<\/tr>\n<\/table>\n<h4>push, unshift, shift, pop<\/h4>\n<table class=\"rem\">\n<tr class=\"brem\">\n<th>push(@liste, &#8222;xyz&#8220;)<\/th>\n<td>&#8222;xyz&#8220; wird hinten angehaengt<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th>unshift(@liste,&#8220;abc&#8220;)<\/th>\n<td>&#8222;abc&#8220; wird vorne eingefuegt<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th>$x = shift(@liste)<\/th>\n<td>vorderstes Element (&#8222;abc&#8220;) wird entfernt und in die Variable $x geschrieben<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th>$x = pop(@liste)<\/th>\n<td>hinterstes Element (&#8222;xyz&#8220;) wird entfernt und in die Variable $x geschrieben<\/td>\n<\/tr>\n<\/table>\n<p><em><br \/>\n@osterei<br \/>\n$ei-&gt;{&#8222;name&#8220;} = &#8222;giftgr\u00fcnes Osterei&#8220;;<br \/>\n$ei-&gt;{&#8222;img&#8220;} = &#8222;http:\/\/www.remote-island.org\/142291\/ggO.gif&#8220;;<br \/>\npush(@osterei,$ei);<br \/>\nwhile (scalar(@osterei)) {<br \/>\n$ei = shift(@osterei);<br \/>\n&#8230; }<\/em><\/p>\n<p><!--more--><\/p>\n<h4>split, join<\/h4>\n<table class=\"rem\">\n<tr class=\"brem\">\n<th><nobr>$string = &#8222;das ist ein satz&#8220;;<\/nobr><br \/>\n<nobr>@words = split(\/ \/, $string);<\/nobr><\/th>\n<td>$string wird aufgesplittet;<br \/>\nTrenner ist das Leerzeichen<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th><nobr>@letters = (&#8222;a&#8220;, &#8222;b&#8220;, &#8222;c&#8220;); <\/nobr><br \/>\n<nobr>$string = join(&#8222;_&#8220;, @letters);<\/nobr><\/th>\n<td>die Elemente des Arrays @letters werden zu &#8222;a_b_c&#8220; zusammengesetzt<\/td>\n<\/tr>\n<\/table>\n<h4>Mehrdimensionales Array<\/h4>\n<p>@liste1 = (&#8222;a&#8220;, &#8222;b&#8220;, &#8222;c&#8220;);<br \/>\n@liste2 = (&#8222;k&#8220;,&#8220;l&#8220;, @liste1); # entspricht (&#8222;k&#8220;, &#8222;l&#8220;, &#8222;a&#8220;, &#8222;b&#8220;, &#8222;c&#8220;)<br \/>\n@liste3 = (&#8222;k&#8220;,&#8220;l&#8220;, [@liste1]); # 3. Element ist wiederum Liste<\/p>\n<h4>Hash %hash<\/h4>\n<table class=\"rem\">\n<tr class=\"brem\">\n<th>$hash{&#8222;key&#8220;} = &#8222;value&#8220;;<\/th>\n<td>&nbsp;<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th>keys(%hash)<\/th>\n<td>erzeugt Liste der Keys des Hashes<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th>values(%hash)<\/th>\n<td>erzeugt Liste der Values des Hashes<\/td>\n<\/tr>\n<\/table>\n<p><em><br \/>\nforeach $key keys(%hash) {<br \/>\nprint &#8222;$value = $hash{$key}\\n&#8220;;<br \/>\n}<\/em><\/p>\n<h4>exists != defined<\/h4>\n<table class=\"rem\">\n<tr class=\"brem\">\n<th>if (exits $ei{&#8222;name&#8220;}) &#8230;<\/th>\n<td>Abfrage ob der Hash-Key &#8222;name&#8220; in %ei vorkommt.<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th nowrap=\"nowrap\">if (defined $ei{&#8222;name&#8220;}) &#8230;<\/th>\n<td>Ein existierender Hash-Eintrag muss nicht definiert sein<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th>delete $ei{&#8222;name&#8220;};<\/th>\n<td>loescht den Eintrag, d.h. er existiert dann nicht mehr!<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th>$ei{&#8222;name&#8220;} = &#8222;&#8220;;<\/th>\n<td>der Eintrag exisitert dann immer noch<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th>%ei = ();<\/th>\n<td>loescht alle Eintraege<\/td>\n<\/tr>\n<\/table>\n<h4>Vorsicht exists boese<\/h4>\n<p>exists legt $h{1} an, wenn man $h1{1}{2} abfragt:<\/p>\n<p><em><br \/>\n#! \/usr\/bin\/perl<br \/>\nuse strict;<br \/>\nuse warnings;<br \/>\nuse Data::Dumper;<\/p>\n<p>my %h = ();<br \/>\nprint Data::Dumper->Dump([\\%h],[&#8218;*h&#8216;]);<br \/>\nif(exists $h{&#8218;1&#8216;}) { print &#8222;jau\\n&#8220;; }<br \/>\nprint Data::Dumper->Dump([\\%h],[&#8218;*h&#8216;]);<br \/>\nif(exists $h{&#8218;1&#8216;}{&#8218;2&#8216;}) { print &#8222;jau\\n&#8220;; }<br \/>\nprint Data::Dumper->Dump([\\%h],[&#8218;*h&#8216;]);<br \/>\nif(exists $h{&#8218;1&#8216;}) { print &#8222;jau\\n&#8220;; }<br \/>\n<\/em><\/p>\n<h4>Verschachteltes Hash %zahl<\/h4>\n<p>Der Value-Eintrag des Hashes %zahl ist wiederum ein Hash<\/p>\n<table class=\"rem\">\n<tr class=\"brem\">\n<th>$zahl{$ref}{$url}<br \/>\n$zahl{$url}{$ref}<\/th>\n<td>sind \u00e4quivalent<\/td>\n<\/tr>\n<\/table>\n<p><em><br \/>\n$zahl{$url}{$ref}++;<br \/>\nforeach $ref (keys(%zahl)) {<br \/>\nforeach $url (keys(%{$zahl{$ref}})) {<br \/>\n$gesamt += $zahl{$ref}{$url};<br \/>\nprint &#8222;von $ref nach $url: $zahl{$ref}{$url} Besucher\\n&#8220;;<br \/>\n}<br \/>\n}<br \/>\nprint &#8222;gesamt = $gesamt \\n&#8220;;<\/em><\/p>\n<p>Verknuepfung ohne Verschachtelung von url und ref zu string mit * als Trennzeichen<\/p>\n<p><em>$zahl{$ref.&#8220;*&#8220;.$url}++;<\/em><\/p>\n<h4>Verschachteltes Hash %hash<\/h4>\n<p>Der Value-Eintrag ist wieder ein Hash.<br \/>\nDie unteren Value-Eintraege sind verschieden: Skalare oder Arrays.<\/p>\n<table class=\"rem\">\n<tr class=\"brem\">\n<th>%{$hash{&#8222;sm&#8220;}}<\/th>\n<td>value zum key ist wieder eine hash-table<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th>$hash{&#8222;sm&#8220;}{&#8222;zahl&#8220;}<\/th>\n<td>ein Value des inneren Hash<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th>$hash{&#8222;sm&#8220;}{&#8222;liste&#8220;}<\/th>\n<td>ein anderer Value des inneren Hash ist ein Array<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th>@{$hash{&#8222;sm&#8220;}{&#8222;liste&#8220;}}[0]<\/th>\n<td>der erste Wert dieses Arrays<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th><nobr>push(@{$hash{&#8222;sm&#8220;}{&#8222;liste&#8220;}}, $blub);<\/nobr><\/th>\n<td>Eintrag von $blub in diese Liste. wird mit push hinten angeh\u00e4ngt<\/td>\n<\/tr>\n<\/table>\n<h4>Verschachteltes Hash %hash<\/h4>\n<p>Der Value Eintrag des Hashes ist ein Array.<\/p>\n<table class=\"rem\">\n<tr class=\"arem\">\n<th>@{$hash{&#8222;blub&#8220;}} = (&#8222;a&#8220;, &#8222;b&#8220;, &#8222;c&#8220;);<\/th>\n<td>&nbsp;<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th>push (@{$hash{&#8222;blub&#8220;}}, &#8222;d&#8220;);<\/th>\n<td>&nbsp;<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th>@{$hash{&#8222;blub&#8220;}}[$i]<\/th>\n<td>&nbsp;<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th>$hash{&#8222;blub&#8220;}-&gt;[$i]<\/th>\n<td>&nbsp;<\/td>\n<\/tr>\n<\/table>\n<h4>Hash- und Array-Referenzen<\/h4>\n<p>Die Referenz enth\u00e4lt den Namen des Hashes bzw. des Arrays.<br \/>\nDavorsetzen des $-Zeichens bewirkt, dass das Hash bzw. das Array &#8222;direkt&#8220; angesprochen wird.<\/p>\n<table class=\"rem\">\n<tr class=\"arem\">\n<th>$h{&#8222;blub&#8220;}<\/th>\n<td>$h-&gt;{&#8222;blub&#8220;} bzw. $$h{&#8218;blub&#8216;}<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th>$a[0]<\/th>\n<td>$a-&gt;[0] bzw. $$a[0]<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th>foreach(keys(%h)){&#8230;}<\/th>\n<td>foreach(keys(%$h)){&#8230;}<\/td>\n<\/tr>\n<tr class=\"brem\">\n<th>for($i=0; $i&lt; =$#a; $i++) {&#8230;}<\/th>\n<td>for($i=0; $i&lt; =$#$a; $i++) {&#8230;}<\/td>\n<\/tr>\n<tr class=\"arem\">\n<th>for($i=0; $i&lt; =@a; $i++) {&#8230;}<\/th>\n<td>for($i=0; $i&lt; =@$a; $i++) {&#8230;}<\/td>\n<\/tr>\n<\/table>\n<p><em><br \/>\n#!\/usr\/bin\/perl<br \/>\nuse Storable &#8220;dclone;<br \/>\n$hash{&#8218;huhu&#8216;} = {&#8218;gaga&#8216;};<br \/>\ngibHashAus(\\%hash);<br \/>\n<\/em><\/p>\n<table class=\"rem\">\n<tr class=\"brem\">\n<td><em><strong>hallo(\\@a);<\/strong><br \/>\nsub hallo{<br \/>\nmy ($array) = @_;<br \/>\n$blub = $array-&gt;[13];<br \/>\nforeach $i (@$array) {&#8230;}<br \/>\n}<br \/>\n<\/em><\/td>\n<td><em><strong>hallo(\\%h);<\/strong><br \/>\nsub hallo{<br \/>\nmy ($hash) = @_;<br \/>\n$blub = $hash-&gt;{&#8222;name&#8220;};<br \/>\nforeach $i (keys(%$h) {&#8230;}<br \/>\n}<br \/>\n<\/em><\/td>\n<\/tr>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Array @liste $liste[-1] das letzte Element der Liste $#liste maximaler Index \/ Anzahl der Felder -1 $anzahl = @liste Anzahl der Felder push, unshift, shift, pop push(@liste, &#8222;xyz&#8220;) &#8222;xyz&#8220; wird hinten angehaengt unshift(@liste,&#8220;abc&#8220;) &#8222;abc&#8220; wird vorne eingefuegt $x = shift(@liste) vorderstes Element (&#8222;abc&#8220;) wird entfernt und in die Variable $x geschrieben $x = pop(@liste) hinterstes [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"_links":{"self":[{"href":"http:\/\/blog.hermione.de\/index.php?rest_route=\/wp\/v2\/posts\/69"}],"collection":[{"href":"http:\/\/blog.hermione.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.hermione.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.hermione.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.hermione.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=69"}],"version-history":[{"count":0,"href":"http:\/\/blog.hermione.de\/index.php?rest_route=\/wp\/v2\/posts\/69\/revisions"}],"wp:attachment":[{"href":"http:\/\/blog.hermione.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=69"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.hermione.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=69"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.hermione.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=69"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}