use strict; my $to_parse='allow:test1, "@test2" deny:test3,test4 password:"123 456"'; my ($allow,$deny,$password)= $to_parse=~/([^:]+?)deny:([^:]+?)password:([^:]+)/; my $result_hash={}; my @allowlist=map {/([^"]+)/} (split /\s*,\s*/ , $allow); if (scalar (@allowlist) == 1) { $result_hash->{"allow"}=$allowlist[0]; } else { $result_hash->{"allow"}=\@allowlist; } print $result_hash->{"allow"} ."\n"; print $result_hash->{"allow"}->[1]; # and similar for deny and password