Thread Innerhalb Hash Def auf Keys zugreifen (42 answers)
Opened by bianca at 2013-09-08 06:08

bianca
 2013-09-08 18:12
#170006 #170006
User since
2009-09-13
7016 Artikel
BenutzerIn

user image
Es geht um eine kleine Formularverwaltung. Das heißt, es gibt derzeit 3 Formate (Plain ANSI, Plain UTF und OpenOffice) und ca. 20 Variablen (z.B. Anrede, Anschrift, Telefon usw.)
Im Hash variablen definiere ich alle Variablen. Jede Variable hat einen Hashkey der definiert, für welche Formate diese Variable zur Verfügung steht und einen Hashkey mit dem ich den Code definiere, der den Variableninhalt zurück gibt.
Im Hash formate definiere ich die drei Formate jeweils mit Code der im Formular die Variablen einfügt. Das geschieht durch Iteration über den Hashkey der Variablen. Dafür muss ich aber pro Variable erst schauen, ob sie für das aktuelle Format gültig ist.
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
my %test;
%test = (
    variablen => [
        {
            name    => 'Var1',
            gueltig => 'pa',    # Gueltigkeit dieser Formularvariable
            code    => sub {
                'foo1'; # natürlich wird hier viel viel mehr gemacht
            },
        },
        {
            name    => 'Var2',
            gueltig => 'pu',
            code    => sub {
                'foo2';
            },
        },
        {
            name    => 'Var3',
            gueltig => 'pa,pu',
            code    => sub {
                'foo3';
            },
        },
    ],
    formate => [
        {
            name    => 'plain ANSI',
            ident   => 'pa',    # konstantes Kürzel zur Identifizierung in der DB
            code    => sub {
                foreach my $ref (grep {grep {$_ eq 'pa'} split /\,/,$_->{gueltig}} @{$test{variablen}}) {
                    print "pa fuert $ref->{name} aus: ".$ref->{code}()."\n";
                }
            },
        },
        {
            name    => 'plain UTF',
            ident   => 'pu',
            code    => sub {
                foreach my $ref (grep {grep {$_ eq 'pu'} split /\,/,$_->{gueltig}} @{$test{variablen}}) {
                    print "pu fuert $ref->{name} aus: ".$ref->{code}()."\n";
                }
            },
        },
    ],
);
foreach my $ref (@{$test{formate}}) {
    print $ref->{code}()."\n";
}

In den beiden Zeilen mit grep würde ich gern auf die Konstanten 'pa' und 'pu' im Stringvergleich verzichten, weil das beim Copy&Paste immer vergessen wird und in diesem Fall nicht sofort auffällt.
10 print "Hallo"
20 goto 10

View full thread Innerhalb Hash Def auf Keys zugreifen