use Modern::Perl; use Text::CSV_XS; use Data::Dump qw/dump/; my $csv = Text::CSV_XS->new( { sep_char => ';' } ); my %data; while () { $csv->parse($_) or die 'Error in parsing'; my @columns = $csv->fields(); push @{ $data{ $columns[0] }{'members'} }, { 'name' => $columns[1], 'email' => $columns[3], 'ip' => $columns[4], }; $data{ $columns[0] }{'alias'} = $columns[2]; } say dump(%data); __DATA__ "GSBDTD1831";"nbSm3Bh";"App.-Server MAIN";"user@example.com";"10.100.0.2" "GSBTD1832";"nbSm3haz";"Appl.-Server Aux";"user1@example.com";"10.100.0.3" "GSTD1822";"denJdkep64";"Printserver";"user3@example.com";"192.168.91.1" "GSTD1822";"denJdw0a22";"Printserver";"user4@example.com";"192.168.91.2" "GSTD1822";"nbSwgP14a";"Printserver";"user5@example.com";"192.168.91.5" "GSTD1983";"nbgwgxOrO";"Server2";"user5@example.com";"10.1.1.22"