use strict; use warnings; use Data::Dumper; use List::Util 'reduce'; my @array = ( 'name riya', 'age 34', 'company xxxx', 'name vinoth', 'age 25', 'call 12345678', 'company xxxx', 'address asdd', 'country Ind' ); my $hashes = reduce { my ( $key, $val ) = split / /, $b; push @$a, {} if $key eq 'name'; $a->[-1]{$key} = $val; $a; } [], @array; print Dumper $hashes; #### $VAR1 = [ { 'age' => '34', 'company' => 'xxxx', 'name' => 'riya' }, { 'call' => '12345678', 'address' => 'asdd', 'name' => 'vinoth', 'country' => 'Ind', 'company' => 'xxxx', 'age' => '25' } ];