Ещё вариант: my $str = "a=b,ccc=ddd,e=f,=zz,zzz="; my $re = qr/\G([^=]*)=([^,]*)(?:,|$)/; my %hash; while($str =~ /$re/g) { $hash{$1} = $2; } или короче my %hash = $str =~ /$re/g;