spie287 has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks,

I have array of hash like this

[ { 'Street'=>'NuN', 'ID'=>'232', 'State'=>'KKDI' 'Forename' =>'alex', 'Surname'=>'davis', }, { 'Street'=>'NuN', 'ID'=>'25452', 'State'=>'TRY', 'Forename'=>'George', 'Surname'=>'Daniel' }, { 'Street'=>'NuN', 'ID'=>'74545', 'State'=>'MDU', 'Forename'=>'Mark', 'Surname'=>'Davies' } ]
And I want to group them with only certain columns in a hash of hash like this
[ { 'User'=>{ 'Forname' =>'' 'Surname'=>'' } 'Residence'=>{ 'Street' =>'', 'State' =>'', }, } ]
but What I have got with my script is All the columns under each of user, Residence.
foreach my $results(@$hash_of_excel){ my $specificresults = GroupResults($results); } sub GroupResults{ my( $AllRecords )= @_; my $specificResults = {}; foreach my $colname(keys %$AllRecords){ for my $group ('User','Residence','IDs','Profile'){ $specificResults->{$group}->{$colname} = $AllRecords->{$colname}; } } warn Dumper($specificResults); return $specificResults; }
I tried with push statements like this push @{$specificResults->{$group}->{$colname}},$AllRecords->{'colname}; but with no luck. Any help is much appreciated. Thanks for your time.

Replies are listed 'Best First'.
Re: group certain columns in a hash
by choroba (Cardinal) on Feb 17, 2015 at 12:33 UTC
    You were almost there:
    #!/usr/bin/perl use warnings; use strict; use Data::Dumper; my %struct = ( User => [qw[ Forename Surename ]], Residence => [qw[ Street State ]], ); sub GroupResults{ my ($AllRecords) = @_; my %grouped; for my $info (keys %struct) { $grouped{$info}{$_} = $AllRecords->{$_} for @{ $struct{$info} +}; } warn Dumper(\%grouped); return \%grouped } my $hash_of_excel = [ { Street => 'NuN', ID => '232', State => 'KKDI', Forename => 'alex', Surname => 'davis', }, { Street => 'NuN', ID => '25452', State => 'TRY', Forename => 'George', Surname => 'Daniel', }, { Street => 'NuN', ID => '74545', State => 'MDU', Forename => 'Mark', Surname => 'Davies', }, ]; for my $results (@$hash_of_excel) { my $specificresults = GroupResults($results); }
    لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ