#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11107038 use warnings; my %hash; while( ) { my ($prefix, $glob, $value) = split /(?<==)|\s/; $hash{$_} = $value for glob $prefix . $glob =~ s/[^:]+/{$&}/gr; } use Data::Dump 'dd'; dd \%hash; __DATA__ Prefix1=A,B:c,d value1 Prefix2=A:b,c:1,2 value2