use strict; use warnings; use Data::Dumper; my %hash = (); my $i = 0; while () { chomp; my ( $sec_id, $Initial_shares ) = split( /,/, $_ ); $hash{secid}{$i} = $sec_id; $hash{init_sh}{$i} = $Initial_shares; $i++; } #print Dumper \%hash; foreach my $outter_key ( keys %hash ) { print "$outter_key => {\n"; while ( my ( $inner_key, $inner_value ) = each $hash{$outter_key} ) { print "\t\t" . qq('$inner_key') . " => " . qq('$inner_value') . "\n"; } print "};\n\n"; } __DATA__ 002826,3777 0028262,3777 0028262,3777 0028262,3777 0028262,3777 0028262,3777 #### init_sh => { '4' => '3777' '1' => '3777' '3' => '3777' '0' => '3777' '2' => '3777' '5' => '3777' }; secid => { '4' => '0028262' '1' => '0028262' '3' => '0028262' '0' => '002826' '2' => '0028262' '5' => '0028262' };