[lug-ld] PERL: Wassn das?

Ekki Plicht (DF4OR) ekki at plicht.de
Di Jan 13 15:17:58 CET 2015


foreach $hefe ( @{ $teig->{queryResponse}->{'entity'} }) {
        print $hefe->{'blubber'}->{'pling'};
}

Erstmal das angucken:
   $teig->{queryResponse}->{'entity'}

Du hast ein Objekt namens $teig
das enthält eine Methode[*] 'queryResponse',
die Methode 'queryResponse' liefert eine Referenz auf einen Hash zurück,
in dem Hash gibt es einen Key 'entity'.
Dessen Value erhälst Du als Resultat des obigen Ausdrucks.

Der Value zu diesem Key 'entity' wird als eine Referenz auf ein Array
interpretiert. Da es bei Perl zu Ambiguitäten bei der Reihung solcher
Ausdrücke kommen kann, hilfst Du dem Compiler indem Du mit dem
umgebenden @{ ... } deutlich machst, dass das was bei
   $teig->{queryResponse}->{'entity'}
zurückgegeben wird eine Referenz auf ein Array sein soll. Das @{...}
dereferenziert solche mehrdeutigen Sachen eindeutig. Bei einfacheren
Ausdrücken hätte auch ein @ alleine vorne dran gereicht.

Über die Werte dieses Arrays iterierst Du mit foreach, die Werte
werden der Reihe nach der Laufvariablen $hefe zugeordnet.

Die Werte des Arrays (nacheinander Inhalt von $hefe) sind wieder
Referenzen auf einen 2-dimensionalen Hash (ein Hash of Hash) mit den
Keys 'blubber' und 'pling'. Der Wert an dieser Stelle des Hashes wird
ausgegeben. Stell Dir 'blubber' und 'pling' einfach als X und Y
Koordinaten in einem 2-dimensionalen Feld vor, nur das halt Strings
(blubber, pling) als Indizes und keine Zahlen verwendet werden.

Mit anderen Worten:
Du iterierst über alle Werte der Property 'entity', welche von der
Objekt-Methode 'queryResponse' des Objektes '$teig' zurückgegeben
wurden. Die Werte der Property 'entity'  sind Referenzen auf einen
zweidimensionalen Hash (Hash of Hash). Das was an der Stelle der
beiden Keys 'blubber' und 'pling' in dem Feld steht wird ausgegeben.


Gruß,
Ekki





Am 13. Januar 2015 um 13:38 schrieb Hakon Benner <Hakon.Benner at hornbach.com>:
>
> Es funktioniert zwar schon, ich würde aber trotzdem gerne wissen, was ich
> hier mache... ;)
>
> Kann mal einer erklären, was das genau hier macht?
>
> foreach $hefe (@{$teig->{queryResponse}->{'entity'}}){
>         print $hefe->{'blubber'}->{'pling'};
> }
>
> Wie schon mal gesagt bin ich was Objekte betrifft echt noch nicht gut
> aufgestellt.
>
> Mit  freundlichen Grüßen
> Best Regards,
> --
> Hakon Benner-Stollowsky
> Network Architect
> IT Infrastructure
>
> HORNBACH-Baumarkt-AG
> Zentralverwaltung
> Hornbachstraße 11
> 76878 Bornheim bei Landau/Pfalz
>
> fon: +49.6348.60.2193
> fax: +49.6348.60.3193
> **************************************************************************************
> Hornbach-Baumarkt-AG
> Sitz: Bornheim/Pfalz
> Registergericht Landau HRB 2311
> USt-IDNr. DE 151 116 749
> WEEE-Reg.-Nr. DE 39697378
>
> Vorsitzender des Aufsichtsrates: Albrecht Hornbach
> Vorstand: Steffen Hornbach (Vorsitzender),
> Roland Pelka (stellv. Vorsitzender),
> Susanne Jäger, Wolfger Ketzler, Karsten Kühn, Ingo Leiner, Dr. Andreas
> Schobert
>
> **************************************************************************************
> HORNBACH auf Facebook    http://www.facebook.com/hornbach.de
> HORNBACH auf Youtube      http://www.youtube.com/hornbach
> HORNBACH auf Twitter        http://twitter.com/Hornbach_tweets
>
> **************************************************************************************
> E-mail-Newsletter: Jetzt anmelden!
>
> Ein Mail. Ein Wink:
> Einfach auf hornbach.de gehen, anmelden und los geht es.
> Lassen Sie sich nichts durch die Lappen gehen!
>
> http://www.hornbach.de/newsletter
>
>
> **************************************************************************************
> This e-mail is only intended for the person(s) to whom it is addressed
> and may contain confidential information.
> Unless stated to the contrary, any opinions or comments are personal
> to the writer and do not represent the official view of the company.
> If you have received this e-mail in error, please notify us immediately
> by reply e-mail and then delete this message
> from your system. Please do not copy it or use it for any purposes,
> or disclose its contents to any other person.
> Thank you for your co-operation.
> **************************************************************************************
>
> _______________________________________________
> lug-ld mailing list
> lug-ld at lists.lug-ld.de
> http://lists.lug-ld.de/mailman/listinfo/lug-ld