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.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
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. In reply to Re: Parsing issue
by robartes
in thread Parsing issue
by hotshot
For:
Use:
& & < < > > [ [ ] ]