Zwergmoos: Perl Hash Join - Hash in String wandeln

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ß!

--
Urlaub vom PC findet Ihr an der Ostsee ;)
  1. [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

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. [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

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

        --
        Urlaub vom PC findet Ihr an der Ostsee ;)
        1. Moin Moin!

          Bastelst Du eine URL zusammen? Dann vergiß nicht, die Werte VOR dem zusammenfügen zu escapen.

          Alexander

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".