# skip initial whitespace, if any
$tag =~ /^\s*/gcxs;
# look for optional key, and a bareword or the start of a quoted string
while ($tag =~ / \G (?: (\w+) \s* = \s*)? ( ['"](?=.) | \w+ ) /gcxs) {
my ($k, $v) = ($1, $2);
# extract quoted string
if ($v eq "'" || $v eq '"') {
$tag =~ / \G ( (?: \\. | [^$v] )* ) $v /gcxs or last;
$v = $1;
$v =~ s/\\(.)/$1/g; # unescape characters
}
# skip optional separator
$tag =~ / \G \s* :? \s* /gcxs;
# save value
push @args, $k ? [$k, $v] : $v;
}
# check if parsing was successful
die if pos $tag != length $tag;
####
my %quotes;
$quotes{$_} = qr/ \G ( (?: \\. | [^$_] )* ) $_ /xs for qw(' ");
####
if (my $pat = $quotes{$v}) {
$tag =~ /$pat/gc or last;
$v = $1;
$v =~ s/\\(.)/$1/g;
}