in reply to Parse data representing hash

"I understand its common courtesy to provide what I have tried so far...."

Well, 'courtesy' is only part of it. The more important part grows out of the Monastery's reason for existence: to help you learn. It's hard to know where your issues are ... ie, what you may need to know/learn more about -- if you don't show us your attempt(s) (boiled down to a concise failure case) and the exact warning, error and/or (output from your code+explanation of how that's not what you intended).

No downvote from me, in this case, but please heed this advice.


Questions containing the words "doesn't work" (or their moral equivalent) will usually get a downvote from me unless accompanied by:
  1. code
  2. verbatim error and/or warning messages
  3. a coherent explanation of what "doesn't work actually means.

check Ln42!

Replies are listed 'Best First'.
Re^2: Parse data representing hash
by peterp (Sexton) on Jun 28, 2014 at 22:13 UTC

    Hi,

    This is my code as it stands, I know it doesn't work and I know why it doesn't work. It basically represents the foundations of my best attempt.

    Chris

    use strict; use warnings; use Data::Dumper; my $rows = [ ]; while ( <DATA> ) { chomp; my $depth = $_ =~ s/\s{4}//g; $depth ||= 0; push @$rows, { depth => $depth, key => $_ }; } my $ref = process( { }, $rows ); print Dumper $ref; sub process { my ( $ref, $rows ) = @_; my $current_row = shift @$rows; my $next_row = $rows->[0] // return $ref; my $current_key = $current_row->{key}; my $current_depth = $current_row->{depth}; my $next_key = $next_row->{key}; my $next_depth = $next_row->{depth}; print "$current_key, $current_depth, $next_key, $next_depth\n"; $ref = $ref->{$current_key} = { }; if ( $current_depth > $next_depth ) { return $ref; } elsif ( $current_depth < $next_depth ) { $ref = process( $ref, $rows ); } return $ref; } __DATA__ one two three four five six