Naja, Perl sagt's Dir ja in der Fehlermeldung: Du versuchst, den Skalar 'OK' als Arrayref zu verwenden:
join(".", @{ $lang{$_}->{$sesslang} })
In
$lang{$_}{$sesslang} steht (für
$_='ok' und
$sesslang='de') aber nur 'OK'. Ich vermute mal, Du willst alle zu einer bestimmten Sprache
$sesslang gehörigen Werte listen, so etwa 'lang_de' Dann schreibst Du sowas wie
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
my %lang;
$lang{"status"}{"de"} = "Status";
$lang{"filter_on"}{"de"} = "eingeschaltet";
$lang{"filter_off"}{"de"} = "ausgeschaltet";
$lang{"ok"}{"de"} = "OK";
$lang{"status"}{"en"} = "State";
$lang{"filter_on"}{"en"} = "on";
$lang{"filter_off"}{"en"} = "off";
$lang{"ok"}{"en"} = "OK";
my %test;
my $sesslang = 'de';
for my $keyword ( keys %lang ) {
print "Add $keyword with $lang{$keyword}{$sesslang} for Sessionlang $sesslang <br>\n";
push @{ $test{"lang_$sesslang"} }, $lang{$keyword}{$sesslang};
}
print join '.', @{ $test{lang_de} };
print "<br>\n";
Ausgabe
Add ok with OK for Sessionlang de <br>
Add filter_off with ausgeschaltet for Sessionlang de <br>
Add status with Status for Sessionlang de <br>
Add filter_on with eingeschaltet for Sessionlang de <br>
OK.ausgeschaltet.Status.eingeschaltet<br>
Beachte, dass die Reihenfolge der Keywords durch die Verwendung von Hashes nicht
bei jeder Sprache gleich sein muss der Reihenfolge beim Erzeugen der Elemente entspricht.
Du solltest vielleicht nochmal in
perldsc reinschauen. Vielleicht kann eine andere Datenstruktur Deinen Bedarf besser abbilden.
Editiert von FIFO: typo
Editiert von FIFO: strike: Falsch ausgedrückt.
Last edited: 2014-06-09 12:18:04 +0200 (CEST)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"