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 ...