# untested my $str='P=HierStehtIrgendwas,I=NocheinText'; # long way (with room for further checks (defined, valid values, ...) my %data; for my $pair ( split /,/, $str ) { my ( $key, $value ) = split /=/, $pair; $data{$key} = $value; } # if you are sure, that data in $str is always valid my %data = split /[=,]/, $str;