linux-l: perl-hashs mit dynamischen Variablen
Steffen Dettmer
steffen at dett.de
Fr Feb 9 11:39:48 CET 2001
* Ulrich Wiederhold wrote on Fri, Feb 09, 2001 at 10:17 +0100:
> Ich habe ein hash, bei dem einem key entweder ein Skalar oder mehrere
> Werte als Referenz-Array zugeordnet sind.
also %hash = { 'key1' => 'hallo',
'key2' => [ "1", "2" ] }
oder wie?
> Dieses Values möchte ich nun in Skalare und Arrays schreiben, die aus
> dem Key generiert werden.
>
> Also, wenn $value($key) = Referenz,
$value{$key} = array ref? ja?
> dann speichere value[i] in '$' .
> '$key' . '[' . $i . ']',
also z.B. $key1[i] = "1"; usw.?
Warum nicht gleich
$key1 = $hash{'key1'}?
Dann geht $key->[1] oder @$key
Mußt Du wirklich symbolische Referenzen verwenden?
> wenn keine Referenz (sondern Skalar), dann
> speichere '$' . '$key' = $value.
das macht getopts so. Da kann man mal in den Source schauen. Ich
schätze, die verwenden globs.
> Dazu benötige ich wohl "eval".
Wieso?!
> Ideen? Es geht um die 2 Zeilen mit eval, der Rest funzt und in dem hash
> ist auch alles ok.
>
> Im Perl-Text sieht das dann so aus:
> while (($key, $value) = each(%config)) {
> $i = 0;
> if (ref $value) {
> while ($i <= $#{$config{$key}}) {
> eval"'\$' . '$key' . '[' . $i . ']' = ${$config{$key}}[$i]}";
@$key = @{$config{$key}};
> $i++;
> }
> } else {
> eval "'\$' . '$key' = $config{$key}";
$$key = $config{$key};
> }
> }
Untested. Als Beispiel hatte ich:
steffen at dx:~ > perl -e '
$var = "b"; #name of symbolic ref is "b"
$a = [ "1", "2"];
@$var = @$a; #use symbolic ref
print join(",", @b), "\n";
'
Ausgabe:
1,2
Ich würde aber lieber richtige Referenzen Verwenden.
oki,
Steffen
--
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.
Mehr Informationen über die Mailingliste linux-l