Hash zuweisen

Hallo,

einen Hash kann man ja z.B. so zuweisen:

%Hash = (P1 =\> "Parameter1" P2 =\> "Parameter2");

Nun habe ich aber eine Zeichenkette, die so aussieht:

'P1 =\> "Parameter1" P2 =\> "Parameter2"'

Die entspricht also genau dem, was bei der Hash-Zuweisung zwischen den Klammern steht. Gibt es nun irgendeine Möglichkeit, diesen String direkt zu verwenden, um den Hash mit den Werten zu füllen? Das wäre ja ähnlich wie split() für Listen. Ich bin bisher leider mit jedem Versuch gescheitert, auch mit eval() undso.

Danke,
Kristian

Komma vergessen
Hatte hier das Komma vergessen, es aber mit probiert:

%Hash = (P1 =\> "Parameter1" **,** P2 =\> "Parameter2");
 
'P1 =\> "Parameter1" **,** P2 =\> "Parameter2"'

Hatte hier das Komma vergessen, es aber mit
probiert:

%Hash = (P1 => „Parameter1“ , P2 =>
„Parameter2“);

‚P1 => „Parameter1“ , P2 => „Parameter2“‘

Hi Kristian,

geht alles:

#! /usr/bin/perl

$str='P1 =\> "Parameter1", P2 =\> "Parameter2"';
print "\>\n";

eval "%hash = ($str)"; # das zauberwort heisst 'eval'

# if ($@) { print "$@"; } # moegliche Fehlerbehandlung...
foreach $k (keys %hash) # Test, ob's funktioniert hat
{
 print "$k =\> $hash{$k}\n";
}

gruss
bernhard

Also doch

eval „%hash = ($str)“; # das zauberwort heisst ‚eval‘

Moin Bernhard,

mit ‚eval‘ hatte ich es ja probiert, aber durch die etwas komplizierte Konstruktion mit Hash-Listen und Listen-Hashs hatte ich doch noch einen Fehler drin bei der String-Verkettung.
Schliesslich galt es dann noch die Pointer richtig aufzulösen (immer wieder eine Sache für sich), und dann war´s geschafft.

Danke,
Kristian