Thread mehrere hashes übergeben an Sub
(8 answers)
Opened by chmod777 at 2021-01-05 06:53
Du musst das dereferenzieren, also die Referenzen auflösen.
Das geht in Perl so: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 my $arr_ref = [ 1, 2, 4, 8, 16 ]; say $$arr_ref[2]; # ergibt 4 say $arr_ref->[2]; # dasselbe anders geschrieben, ergibt auch 4 my $h_ref = { Koordinaten => { Laenge => 13.4711, Breite => -42.0815}, Ortsnamen => [ 'boodorf', 'Boohtan', 'Boost' ] }; say $h_ref->{Ortsnamen}->[0]; # ergibt boodorf say $$h_ref{Ortsnamen}[0]; # ergibt boodorf Ich weiß, das kann in Perl extrem grausig aussehen, als Verschachtelung von Sigillen (also die $%& am Anfang der Variablenamen) und geschweiften Klammern (zwecks besserer Sichtbarkeit später für sich selbst und andere). Ein weiteres Beispiel: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #!/usr/bin/perl use strict; use warnings; use 5.010; use utf8; my %adresse = ( Name => 'Bkah', Strasse => 'Morgula Av. 11-B', Land => 'Perlistan' ); my %beleg_art = ( Art => 'Rechnung' ); my $href = { beleg_art => \%beleg_art, adresse => \%adresse, }; my $pdf_file = create_pdf_v3($href); sub create_pdf_v3 { my $href = shift; my %belege_hash = %{ $href->{beleg_art} }; my %adressen_hash = %{ $href->{adresse} }; print "Der Kunde ist ", $adressen_hash{Name}; print " mit ", $belege_hash{Art}; } Ergibt: Der Kunde ist Bkah mit Rechnung Neue Perl haben auch eine experimentelle Syntax, welche die Lesbarkeit verbessert. Muss aber meist aktiviert werden mit use feature "postderef"; oder use v5.20;. Um im Produktionscode nicht zu stören, sind entsprechende Warnungen mit no warnings "experimental::postderef"; zu unterdrücken. Statt my %belege_hash = %{ $href->{beleg_art} }; geht dann auch my %belege_hash = $href->{beleg_art}->%*; Welches du als lesbarer empfindest, musst du wissen. Weiteres zu Dereferenzierung (alte und neue Art der D.): https://www.heise.de/developer/artikel/Syntaktisch... https://perldoc.perl.org/perlref#Using-References https://perldoc.perl.org/perlref#Postfix-Dereferen... https://perlmaven.com/dereference-hash-array https://www.effectiveperlprogramming.com/2016/04/p... https://www.effectiveperlprogramming.com/2014/09/u... http://www.mathe2.uni-bayreuth.de/perl/EP/referenz... Last edited: 2021-01-05 10:53:15 +0100 (CET) |