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 40 41 42 43 44 45 46 47 48 49
use strict; use warnings; use Data::Dumper; my ( %artikel, $artikel, $artikel_id, $artikel_nr, $bestand ); # zunächst erstelle ich ein Hash mit allen Artikelbeständen $artikel { 1 } = { artikel_nr => 'Artikel_1', bestand => 10, }; $artikel { 2 } = { artikel_nr => 'Artikel_2', bestand => 20, }; # in Wirklichkeit füttere ich den Hash über eine Schleife, die Werte kommen aus einer Datenbank print "Inhalt von \%artikel:\n"; print Dumper ( %artikel); print "\n\n"; # die Artikelbestände sind unterteilt in Unterbestände, sog. Chargenbestände; der Gesamtbestand (bestand) ist die Summe der Chargenbestände (c_bestand). Die Chargenbestände lese ich ebenfalls aus der Datenbank ein. Jede Charge ist durch eine ID gekennzeichnet. my ( %c_artikel, $c_artikel, $c_artikel_id, $c_id, $c_bestand ); # nun erstelle ich einen Hash mit allen Chargenbeständen $c_artikel { 1 } = { c_id => 'Charge_1', c_bestand => 3, }; $c_artikel { 1 } = { c_id => 'Charge_2', c_bestand => 7, }; $c_artikel { 2 } = { c_id => 'Charge_1', c_bestand => 9, }; $c_artikel { 2 } = { c_id => 'Charge_2', c_bestand => 11, }; # in Wirklichkeit füttere ich den Hash über eine Schleife, die Werte kommen aus einer Datenbank print "Inhalt von \%c_artikel:\n"; print Dumper ( %c_artikel); print "\n\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
Inhalt von %artikel:
$VAR1 = '1';
$VAR2 = {
'bestand' => 10,
'artikel_nr' => 'Artikel_1'
};
$VAR3 = '2';
$VAR4 = {
'artikel_nr' => 'Artikel_2',
'bestand' => 20
};
Inhalt von %c_artikel:
$VAR1 = '1';
$VAR2 = {
'c_bestand' => 7,
'c_id' => 'Charge_2'
};
$VAR3 = '2';
$VAR4 = {
'c_id' => 'Charge_2',
'c_bestand' => 11
};
1
2
3
4
5
6
7
8
9
10
11
12
13
$VAR1 = '1';
$VAR2 = {
'bestand' => 10,
'artikel_nr' => 'Artikel_1'
'chargenbestand' => {
'c_id' => 'Charge_1'
'c_bestand' => 3,
'c_id' => 'Charge_2'
'c_bestand' => 7,
};
};
$VAR3 = '2';
...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
# nun erstelle ich einen Hash mit allen Chargenbeständen $c_artikel { 1 } = { c_id => 'Charge_1', c_bestand => 3, }; #### hiermit wird der vorige Eintrag für "1" überschrieben. $c_artikel { 1 } = { c_id => 'Charge_2', c_bestand => 7, }; $c_artikel { 2 } = { c_id => 'Charge_1', c_bestand => 9, }; #### hiermit wird der vorige Eintrag für "2" überschrieben $c_artikel { 2 } = { c_id => 'Charge_2', c_bestand => 11, };
1 2 3 4 5 6 7
# nun erstelle ich einen Hash mit allen Chargenbeständen push @{ $c_artikel{ 1 } }, { c_id => 'Charge_1', c_bestand => 3, }; push @{ $c_artikel{ 1 } }, { c_id => 'Charge_2', c_bestand => 7, }; push @{ $c_artikel{ 2 } }, { c_id => 'Charge_1', c_bestand => 9, }; push @{ $c_artikel{ 2 } }, { c_id => 'Charge_2', c_bestand => 11, };
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
use strict; use warnings; use Data::Dumper; # zunächst erstelle ich ein Hash mit allen Artikelbeständen my %artikel = ( 1 => { artikel_nr => 'Artikel_1', bestand => 10, }, 2 => { artikel_nr => 'Artikel_2', bestand => 20, }, ); # in Wirklichkeit füttere ich den Hash über eine Schleife, die Werte kommen aus einer Datenbank print "Inhalt von \%artikel:\n"; print Dumper ( \%artikel); print "\n\n"; # die Artikelbestände sind unterteilt in Unterbestände, sog. Chargenbestände; der Gesamtbestand (bestand) ist die Summe der Chargenbestände (c_bestand). Die Chargenbestände lese ich ebenfalls aus der Datenbank ein. Jede Charge ist durch eine ID gekennzeichnet. my %c_artikel; # nun erstelle ich einen Hash mit allen Chargenbeständen push @{ $c_artikel{ 1 } }, { c_id => 'Charge_1', c_bestand => 3, }; push @{ $c_artikel{ 1 } }, { c_id => 'Charge_2', c_bestand => 7, }; push @{ $c_artikel{ 2 } }, { c_id => 'Charge_1', c_bestand => 9, }; push @{ $c_artikel{ 2 } }, { c_id => 'Charge_2', c_bestand => 11, }; # in Wirklichkeit füttere ich den Hash über eine Schleife, die Werte kommen aus einer Datenbank print "Inhalt von \%c_artikel:\n"; print Dumper ( \%c_artikel); print "\n\n"; # alles in %artikel aufnehmen for my $key ( keys %c_artikel ) { $artikel{$key}->{ charge } = $c_artikel{$key}; } { $Data::Dumper::Sortkeys = 1; print "Neuer Inhalt von \%artikel:\n"; print Dumper ( \%artikel); print "\n\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
27
28
29
30
31
Neuer Inhalt von %artikel:
$VAR1 = {
'1' => {
'artikel_nr' => 'Artikel_1',
'bestand' => 10,
'charge' => [
{
'c_bestand' => 3,
'c_id' => 'Charge_1'
},
{
'c_bestand' => 7,
'c_id' => 'Charge_2'
}
]
},
'2' => {
'artikel_nr' => 'Artikel_2',
'bestand' => 20,
'charge' => [
{
'c_bestand' => 9,
'c_id' => 'Charge_1'
},
{
'c_bestand' => 11,
'c_id' => 'Charge_2'
}
]
}
};
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
#!/usr/bin/perl use warnings; use strict; package Artikel { sub new { my $classname = shift; my $args = {@_}; my $self = {nr => $args->{nr}, bestand => $args->{bestand}}; $self->{chargen} = []; return bless($self, $classname); } sub addCharge { my $self = shift; my $charge = shift; push($self->{chargen}, $charge); } sub showChargen { my $self = shift; my @chargen = @{$self->{chargen}}; my $i; if ($#chargen >= 0) { print "Artikel $self->{nr} hat folgende Chargen:\n\n"; foreach $i (@chargen) { print "ChargenID: $i->{id}\n"; print "Chargenbestand: $i->{bestand}\n"; print "\n"; } print "----------------------\n\n"; } } } package Charge { sub new { my $classname = shift; my $args = {@_}; my $self = {id => $args->{id}, bestand => $args->{bestand}}; return bless($self, $classname); } } my $artikel1 = Artikel->new(nr => 1, bestand => 10); my $artikel2 = Artikel->new(nr => 2, bestand => 20); $artikel1->addCharge(Charge->new(id => 1, bestand => 3)); $artikel1->addCharge(Charge->new(id => 2, bestand => 7)); $artikel2->addCharge(Charge->new(id => 1, bestand => 9)); $artikel2->addCharge(Charge->new(id => 2, bestand => 11)); print "\n"; $artikel1->showChargen(); $artikel2->showChargen();
%legacy = (%legacy, %update);