1 2 3 4 5 6 7 8 9 10
my $Skalar='%Hash1'; my $HashRef=\%Hash1; foreach my $key (sort keys $Skalar) { print "Key: $key\n"; } foreach my $key (sort keys $HashRef) { print "Key: $key\n"; }
1
2
3
4
5
# v--- dereference here
$ perl -E 'my %hash = ( foo => 1, ); my $ref = \%hash; say keys %$ref;'
foo
$ perl -E 'my %hash = ( foo => 1234 ); my $ref = \%hash; say values %$ref;'
1234
perldoc -f keys...
Starting with Perl 5.14, an experimental feature allowed keys to take a scalar expression. This experiment has been deemed unsuccessful, and was removed as of Perl 5.24.
...
1
2
3
4
5
6
7
8
9
10
foreach my $index (........) { # Hauptschleife 1
...
# Logik zum Erzeugen des zu verwendenten Hashnamens
# z.B. %Hash1 oder %Names_4
# erzeugen eines Skalars mit diesem erzeugten Hashnamen
$Skalar = '%Hash1';[/b]
foreach my $key (sort keys $Skalar) { # Innere Schleife
print "Key: $key\n";
}
}
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
use strict; use warnings; use 5.010; my $hash1 = { foo => 1 }; # Hash Referenz my %hash2 = ( bar => 2 ); # Hash my %super = ( 'hash1' => $hash1, # Hash Referenz direkt nehmen 'hash2' => \%hash2, # benannten Hash mit Referenz übernehmen ); for my $index ( 1, 2 ) { # generiere hash name my $wanted_hash = "hash" . $index; say "$wanted_hash:"; # "Abkuerzung" zum gesuchten Hash my $hRef = $super{$wanted_hash}; # Durch Hash iterieren for my $k ( keys %$hRef ) { say "$k : ", $hRef->{$k}; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
use 5.020; use warnings; my %Geraete_Hash = ( 'Hammer' => { TYPE => 417, Adresse => 'Pseudopolis Yard', ID => 'Ist das der Name des Geräts?', Gewicht => 500, }, 'Bohrer' => { TYPE => 413, Adresse => 'Treacle Mine Road', ID => 'Black & Decker', Leistung => 800, } ); foreach my $geraet (sort keys %Geraete_Hash) { say "$geraet:"; my %geraet = %{$Geraete_Hash{$geraet}}; foreach my $key (sort keys %geraet) { say " $key = $geraet{$key}"; } }
2019-12-11T17:02:59 wollikIn einem Hash (Geräte_Hash) of hashes, sind verschiedene Gerätennamen als Keys definiert.
Jeder dieser keys is wiederum ein hash mit den einzigartigen Parametern für dieses Device (Adresse, ID, TYPE,...)
Per ausgelesenen Geräte-Type greife ich auf weitere unterschiedliche Hashes (mit type spezifischen keys) zu, die die Parameter für diesen Gerätetype beinhalten welche bei allen dieser Gerätetypen gleich sind.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#!/usr/bin/perl use warnings; use strict; package Device { sub new { my $classname = shift; my $self = {address => shift, id => shift, type => shift}; return bless($self, $classname); } sub getType { my $self = shift; return $self->{type}; } } my $device1 = Device->new("/dev/test", 1, "test-device"); print "\nType of device1 is: \"" . $device1->getType() . "\".\n\n";