in reply to Reducing HoH to AoA
#!/usr/bin/perl -w use strict; my $start = { 'lineitem' => { 'invoice' => 1 }, 'invoice' => { 'lineitem' => 1, 'claim' => 1 }, 'insurer' => { 'claim' => 1 }, 'claim' => { 'invoice' => 1, 'insurer' => 1 } }; my %seen_set; my $end = []; foreach my $k (keys %$start) { next if exists $seen_set{$k}; my %set; recur(\%set, $k); next unless keys %set; push @$end, [keys %set]; @seen_set{keys %set} = (); } sub recur { my ($set, $k) = @_; return if exists $seen_set{$k} or exists $set->{$k}; $set->{$k} = 1; recur($set, $_) foreach keys %{$start->{$k}}; } use Data::Dumper; print Dumper($end);
|
|---|