diff options
author | Larry Wall <lwall@netlabs.com> | 1991-06-06 23:28:14 +0000 |
---|---|---|
committer | Larry Wall <lwall@netlabs.com> | 1991-06-06 23:28:14 +0000 |
commit | 9ef589d8078fdf16316dec772c00e81b3c38fd22 (patch) | |
tree | e45650d2a4acb876fe2b249e8727e066c5be4c90 /lib/shellwords.pl | |
parent | 352d5a3ab0aab9889c59e847643d265e062cec0b (diff) | |
download | perl-9ef589d8078fdf16316dec772c00e81b3c38fd22.tar.gz |
perl 4.0 patch 8: patch #4, continued
See patch #4.
Diffstat (limited to 'lib/shellwords.pl')
-rw-r--r-- | lib/shellwords.pl | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/lib/shellwords.pl b/lib/shellwords.pl new file mode 100644 index 0000000000..168991fa3f --- /dev/null +++ b/lib/shellwords.pl @@ -0,0 +1,42 @@ +#; shellwords.pl +#; +#; Usage: +#; require 'shellwords.pl'; +#; @words = &shellwords($line); +#; or +#; @words = &shellwords(@lines); +#; or +#; @words = &shellwords; # defaults to $_ (and clobbers it) + +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 (s/^'(([^'\\]+|\\[\\'])*)'//) { + ($snippet = $1) =~ s#\\(.)#$1#g; + } + elsif (s/^\\(.)//) { + $snippet = $1; + } + elsif (s/^([^\s\\'"]+)//) { + $snippet = $1; + } + else { + s/^\s+//; + last; + } + $field .= $snippet; + } + push(@words, $field); + } + @words; +} +1; |