in reply to Parsing issue

You could do something like:
use strict; my $to_parse='allow:test1, "@test2" deny:test3,test4 password:"123 4 +56"'; 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
There are obvious ways of improving this: putting in a better regexp with lookahead matches, putting the stanzas (allow, deny, ...) in a hash or array and iterate over that one etc., but this should give you an idea on how to proceed.

CU
Robartes-

Update:After submitting, I saw jj808's solution - that has the better regexp I mentioned, and the commas between "" issue he mentions is also present in my code.