39 lines
691 B
Perl
39 lines
691 B
Perl
sub shellwords {
|
|
package shellwords;
|
|
local($_) = join('', @_) if @_;
|
|
local(@words,$snippet,$field);
|
|
|
|
s/^\s+//;
|
|
while ($_ ne '') {
|
|
$field = '';
|
|
for (;;) {
|
|
if (s/^"(([^"\\]|\\[\\"])*)"//) {
|
|
($snippet = $1) =~ s#\\(.)#$1#g;
|
|
}
|
|
elsif (/^"/) {
|
|
die "Unmatched double quote: $_\n";
|
|
}
|
|
elsif (s/^'(([^'\\]|\\[\\'])*)'//) {
|
|
($snippet = $1) =~ s#\\(.)#$1#g;
|
|
}
|
|
elsif (/^'/) {
|
|
die "Unmatched single quote: $_\n";
|
|
}
|
|
elsif (s/^\\(.)//) {
|
|
$snippet = $1;
|
|
}
|
|
elsif (s/^([^\s\\'"]+)//) {
|
|
$snippet = $1;
|
|
}
|
|
else {
|
|
s/^\s+//;
|
|
last;
|
|
}
|
|
$field .= $snippet;
|
|
}
|
|
push(@words, $field);
|
|
}
|
|
@words;
|
|
}
|
|
1;
|