use Data::Dumper;
$_ = 'command1 --max-size=2M a=1 --fast =2 --all --type="some value" --b= --c=1';
my ($command, @switch, %param, @error);
while (/\G\s*((?!--)\S+)?(?(1)|\s+(?>--|)((?<=--)[a-z\d-]+)(="?|(?=\s))((?<![="])|(?<=")[^"]*(?=")|(?<==)(?!")\S*(?!"))"?(?=\s|$))/ig) {
push(@error, $1) if ($1) && ($command); $command = $1 if ($1) && !($command);
push(@switch, $2) if !($1) && !($3); $param->{$2} = $4 if !($1) && ($3);
}
print "Command:\n'$command'\n"; print "'$_'\n" for (@switch); print "Syntax error(s):\n"; print "'$_'\n" for (@error);
dXNlIERhdGE6OkR1bXBlcjsKJF8gPSAnY29tbWFuZDEgLS1tYXgtc2l6ZT0yTSBhPTEgLS1mYXN0ID0yIC0tYWxsIC0tdHlwZT0ic29tZSB2YWx1ZSIgLS1iPSAtLWM9MSc7Cm15ICgkY29tbWFuZCwgQHN3aXRjaCwgJXBhcmFtLCBAZXJyb3IpOwp3aGlsZSAoL1xHXHMqKCg/IS0tKVxTKyk/KD8oMSl8XHMrKD8+LS18KSgoPzw9LS0pW2EtelxkLV0rKSg9Ij98KD89XHMpKSgoPzwhWz0iXSl8KD88PSIpW14iXSooPz0iKXwoPzw9PSkoPyEiKVxTKig/ISIpKSI/KD89XHN8JCkpL2lnKSB7CiAgcHVzaChAZXJyb3IsICAgJDEpIGlmICAoJDEpICYmICAoJGNvbW1hbmQpOwogICRjb21tYW5kICAgICA9ICQxICBpZiAgKCQxKSAmJiAhKCRjb21tYW5kKTsKICBwdXNoKEBzd2l0Y2gsICAkMikgaWYgISgkMSkgJiYgISgkMyk7CiAgJHBhcmFtLT57JDJ9ID0gJDQgIGlmICEoJDEpICYmICAoJDMpOwp9CnByaW50ICJDb21tYW5kOlxuJyRjb21tYW5kJ1xuIjsKcHJpbnQgIlxuIjsKcHJpbnQgIlN3aXRjaChlcyk6XG4iOwpwcmludCAiJyRfJ1xuIiBmb3IgKEBzd2l0Y2gpOwpwcmludCAiXG4iOwpwcmludCAiUGFyYW1ldGVyczpcbiI7CnByaW50IER1bXBlcigkcGFyYW0pOwpwcmludCAiXG4iOwpwcmludCAiU3ludGF4IGVycm9yKHMpOlxuIjsKcHJpbnQgIickXydcbiIgZm9yIChAZXJyb3IpOw==