in reply to Parse file to Hash of Hash etc.

This code should make a string that looks like $hash{'hostname'}{'rvd'}{'RTD'}{'daemonPort'} = 7500, and then run an eval on it.
my %hash; while( <> ) { my ( $front, $back ) = split /\s*:\s*/; my @keys = split /\*/, $front; eval( '$hash' . ( join '', map { "{'$_'}" } @keys ) . "=" . $back +); }
Warning: Untested code.

You could also do probably more easily do this with a recursive sub.

Replies are listed 'Best First'.
Re^2: Parse file to Hash of Hash etc.
by merlyn (Sage) on May 18, 2005 at 19:02 UTC
      Point taken. And a good read too. Thanks! I'll try to be more careful next time. Do you have a suggestion of the simplest way to do this safely?
      I think I understand what you are saying but the code from mrborisguy works great for me and I understand what it is doing, which for me is very important. I do not like to just cut and past code because in the end someone has to support it. I did try the data dumper but am unable to access the data on the return. ?? Probably since I don't know what I am doing :) maybe a plus one for for mrborisguy ?
Re^2: Parse file to Hash of Hash etc.
by crusty_collins (Friar) on May 18, 2005 at 18:44 UTC
    VERY cool One question.... What is recursive sub? I can not find it in my perl book.
      A recursive sub is when a sub calls itself in some form.
      The best example of this usually given is the mathematical function factorial (denoted by !). Are you familiar with it? 4! = 4*3*2*1. 7! = 7*6*5*4*3*2*1. In general, n! = n*(n-1)*(n-2)*...*2*1. But you could also say that n! = n*(n-1)!.

      so if you would make a sub called factorial, then it would be something like this:
      sub factorial { my $n = shift; return $n * &factorial( $n - 1 ); }
      but this obviously doesn't work, 'cause it will keep going and going, so you need a stopping point too.
      sub factorial { my $n = shift; if ( $n == 1 ) { return 1 } return $n * &factorial( $n - 1 ); }
      Try searching Google for recursive functions, recursive subs, recursion, etc.
Re^2: Parse file to Hash of Hash etc.
by crusty_collins (Friar) on May 18, 2005 at 18:48 UTC
    The untested code works just fine for me.