princepawn has asked for the wisdom of the Perl Monks concerning the following question:
In this node I was given an excellent suggestion by George_Sherston on how to handle a data processing issue. In summary, convert my HoH to an AoH.
I have now coded Data::Hash::Flatten to this end. And it works... however, I want to get rid of my global @Data::Hash::Flatten::flattened variable which keeps all the created records and instead simply use an array which is passed through the recursive calls and returned at the end.
Here is summary input and output of my module
my $a = { bill => { '5/27/96' => { 'a.dat' => 1, 'b.txt' => 2, 'c.lsp' + => 3 } \ }, jimm => { '6/22/98' => { 'x.prl' => 9, 'y.pyt' => 8, 'z.tc +l' => 7 } \ } } ; my @a = Data::Hash::Flatten->this($a, [qw(name date file)]); use Data::Dumper; print Dumper(\@a); $VAR1 = [ { 'hits' => 7, 'date' => '6/22/98', 'name' => 'jimm', 'file' => 'z.tcl' }, { 'hits' => 8, 'date' => '6/22/98', 'name' => 'jimm', 'file' => 'y.pyt' }, { 'hits' => 9, 'date' => '6/22/98', 'name' => 'jimm', 'file' => 'x.prl' }, { 'hits' => 3, 'date' => '5/27/96', 'name' => 'bill', 'file' => 'c.lsp' }, { 'hits' => 2, 'date' => '5/27/96', 'name' => 'bill', 'file' => 'b.txt' }, { 'hits' => 1, 'date' => '5/27/96', 'name' => 'bill', 'file' => 'a.dat' }
and here is my source code
sub this { my (undef, $href, $field, $depth, $flat_rec) = @_; @flattened = () unless defined($depth); if (ref $href) { my @key = keys %$href; # warn "ref $href succeeded. depth: $depth keys: @key, the ref:", D +umper($hre\ f); for my $key_i (0..$#key) { my $key = $key[$key_i]; # warn "KEY: $key"; $flat_rec->{$field->[$depth]} = $key; # warn "(depth $depth) flat_rec->{$field->[$depth]} = $key"; Data::Hash::Flatten->this($href->{$key}, $field, $depth+1, $flat +_rec, @fla\ ttened); } } else { $flat_rec->{$field->[$depth]} = $href; # warn "no more refs. we are at bottom. pushing:", Dumper($flat_rec +), "here i\ s href:", Dumper($href), "depth $depth"; use Storable qw(dclone); my $new_rec = dclone $flat_rec; push @flattened, $new_rec; } @flattened; }
edited: Tue Jul 2 14:36:31 2002 by jeffa - added reamore tag
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Extending and Preserving Array State through Recursive Function Calls
by broquaint (Abbot) on Jul 02, 2002 at 12:46 UTC | |
Re: Extending and Preserving Array State through Recursive Function Calls
by demerphq (Chancellor) on Jul 02, 2002 at 13:50 UTC |
Back to
Seekers of Perl Wisdom