use Data::Dumper; for my $record (split m/\n\n\n/, $tempStr){ my %user_info; for (split m/\n/, $record){ if (m/^User (.*)$/){ $user_info{name} = $1; } elsif (m/^(\w+)\s*=\s*(.*)$/){ $user_info{$1} = $2; } } print Dumper \%user_info if %user_info; }