Thread Hash in Subroutinen
(12 answers)
Opened by Andi123 at 2017-03-30 18:58
Du meinst dereferenzieren?
Eine Referenz ist erst mal ein Skalar auf ein Array, einen Hash, ein Objekt, eine sub, etc. my %hash = (test => 123, foo => 42, bar => 13); ### das Voranstellen des \ erzeugt eine Referenz my $hash_ref = \%hash; # jetzt hat $hash_ref die Referenz auf den Hash %hash ### eine Referenz lässt sich auch direct bei bestimmten Perl-Objekten erzeugen # Das Klammern einer Liste zwischen [ ] erzeugt eine Array-Referenz my $array_ref = [ 1, 2, 4, 8, 16, 32, 64]; # Das Klammern einer Liste zwischen {} erzeugt eine Hash-Referenz my $hash_ref = { eins => 1, zwei => 2, drei => 4 }; # Dereferenzieren in einen Hash my %the_hash = %$hash_ref; 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 33 34 35 36 37 38 39 #!/usr/bin/perl use strict; use warnings; use 5.010; use utf8; #### in einer Subroutine derefernzieren #### # ## Wir bauen uns ein Toast-Brot nach eigenen Wünschen # # sub Toast_mit ($brotart, $anzahl_der_scheiben, $referenz_auf_reihenfolge_des_belags, $referenz_auf_belaege) # sub Toast_mit { my $was = shift; # Art des Brotes my $wieviel = shift; # Menge der Brotscheiben my $reihenfolge_ref = shift; # Referenz auf Array mit den Belägen my $belag_ref = shift; # Referenz auf Hash mit Belag und Menge des Belags say "Du möchtest $wieviel × $was"; say " mit folgenden Belägen:"; for my $belag ( @{$reihenfolge_ref} ) { # Referenz auf einen Array wird durch Voranstellen von @ in ein Array dereferenziert say " ", $belag, ": ", $belag_ref->{$belag}; # Referenz auf einen Wert in einem Hash wird durch nachfolgendes -> dereferenziert # ${$belag_ref}{$belag}; # oder durch vorangestellten $ } } my %belaege = ( Butter => "4 Stück", Salami => "2 Scheiben", Petersilie => "4 Blätter", Senf => "100 g", Tomate => "1 Scheibe"); my @reihenfolge = qw(Butter Salami Tomate Senf Petersilie); Toast_mit("Roggenbrot", 3, \@reihenfolge, \%belaege); Ergibt: Du möchtest 3 × Roggenbrot mit folgenden Belägen: Butter: 4 Stück Salami: 2 Scheiben Tomate: 1 Scheibe Senf: 100 g Petersilie: 4 Blätter PS: Ich bin eine schlechte Erklärdrachin, fürchte ich. Last edited: 2017-03-31 12:02:02 +0200 (CEST) |