/usr/share/perl5/TAP/Parser
NameSizeModeActions
Iterator/-0755rm
Result/-0755rm
Scheduler/-0755rm
Source/-0755rm
YAMLish/-0755rm
Aggregator.pm92860644editdlrm
Grammar.pm154510644editdlrm
Iterator.pm30910644editdlrm
IteratorFactory.pm36340644editdlrm
Multiplexer.pm42930644editdlrm
Result.pm61910644editdlrm
ResultFactory.pm42650644editdlrm
Scheduler.pm72440644editdlrm
Source.pm35450644editdlrm
Utils.pm14760644editdlrm
Edit: /usr/share/perl5/TAP/Parser/Utils.pm (1476B)
package TAP::Parser::Utils; use strict; use Exporter; use vars qw($VERSION @ISA @EXPORT_OK); @ISA = qw( Exporter ); @EXPORT_OK = qw( split_shell ); =head1 NAME TAP::Parser::Utils - Internal TAP::Parser utilities =head1 VERSION Version 3.17 =cut $VERSION = '3.17'; =head1 SYNOPSIS use TAP::Parser::Utils qw( split_shell ) my @switches = split_shell( $arg ); =head1 DESCRIPTION B =head2 INTERFACE =head3 C Shell style argument parsing. Handles backslash escaping, single and double quoted strings but not shell substitutions. Pass one or more strings containing shell escaped arguments. The return value is an array of arguments parsed from the input strings according to (approximate) shell parsing rules. It's legal to pass C in which case an empty array will be returned. That makes it possible to my @args = split_shell( $ENV{SOME_ENV_VAR} ); without worrying about whether the environment variable exists. This is used to split HARNESS_PERL_ARGS into individual switches. =cut sub split_shell { my @parts = (); for my $switch ( grep defined && length, @_ ) { push @parts, $1 while $switch =~ / ( (?: [^\\"'\s]+ | \\. | " (?: \\. | [^"] )* " | ' (?: \\. | [^'] )* ' )+ ) /xg; } for (@parts) { s/ \\(.) | ['"] /defined $1 ? $1 : ''/exg; } return @parts; } 1;