Perl Hash Join - Hash in String wandeln
Zwergmoos
- perl
0 Beat
Hallo Forumler,
ich kriege es einfach nicht hin einen Hash in einen einfachen String umzuwandeln. Mein Hash schaut so aus:
$VAR1 = {
'1' => {
'name' => 'disk01',
'type' => 'daten'
},
'0' => {
'name' => 'disk02',
'type' => 'musik'
}
};
Herauskommen soll ein String der so aussieht:
name=disk01,type=daten|name=disk02,type=musik
Dazu habe ich mir eine Funktion gebaut:
sub joinMe {
my ( $self, $options ) = @_;
my $joined;
foreach my $k (keys %{$options}){
$joined .= join("=",$options->{$k});
}
return $joined;
}
print Dumper($self->joinMe($meinhash));
Als Rückgabe erhalte ich einen String mit den Referenzen:
HASH(0x16a2fb0)HASH(0x16a2f08)
Ich komme da nicht wirklich weiter, vermutlich steckt mein Fehler in der Foreachschleife, weil er mir "$options->{$k}" nicht als String zusammensetzt.
Sieht hier jemand was ich da verbockt habe?
Ich würde mich freuen wenn mir jemand einen Tipp geben kann.
Danke und Gruß!
[code lang=perl]sub joinMe {
my ( $self, $options ) = @_;
my $joined;
foreach my $k (keys %{$options}){
$joined .= join("=",$options->{$k});
$joined .= join("=",@{ $options->{$k} } );
}
return $joined;
}
mfg Beat
[code lang=perl]sub joinMe {
my ( $self, $options ) = @_;
my $joined;
foreach my $k (keys %{$options}){
$joined .= join("=",$options->{$k});$joined .= join("=",@{ $options->{$k} } );
}
return $joined;
}mfg Beat
War leider zu schnell
$options->{$k} verweist ja auf eine hashreferenz.
da braucht es dann
foreach{ sort keys %{ $options->{$k} } }{
$joined .= $_ .'='. $options->{$k}{$_} . ';'
}
mfg Beat
--
<o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
Hi Beat,
danke für deine Hilfe.
Die ForEach Schleife aus deinem Post hat bei mir einen Error bei der Klammer "foreach {" geworfen, ich habe mir das ganze so hingebaut:
foreach my $k (keys %{$options}){
foreach my $n (sort keys %{$options->{$k}}){
$joined .= $n .'='. $options->{$k}{$n} . ';'
}
}
Wobei deine Version auch interssant wäre weil sie etwas kürzer ist :-)
Danke und Viele Grüße ...