Perl500503Syntax-OrDie
view release on metacpan or search on metacpan
t/corpus-stack/PSGI-Handy/lib/PSGI/Handy/Router.pm view on Meta::CPAN
# _compile - turn a path pattern into (qr//, \@param_names)
#
# A pattern is split on '/' into segments. Each segment becomes:
# ':name' -> ([^/]+) and records the parameter name 'name'
# '*' (only as the LAST segment) -> (.*) recorded as 'splat'
# anything else -> quotemeta (literal, dots are NOT wildcards)
# The whole thing is anchored with \A ... \z so matching is exact.
# --------------------------------------------------------------------
sub _compile {
my ($pattern) = @_;
my @segs = split m{/}, $pattern, -1; # -1 keeps trailing empty fields
my @names;
my @parts;
my $last = $#segs;
my $i;
for ($i = 0; $i <= $last; $i++) {
my $seg = $segs[$i];
if ($seg eq '*' && $i == $last) {
push @parts, '(.*)';
push @names, 'splat';
}
t/corpus-stack/mb/lib/mb.pm view on Meta::CPAN
# /i modifier
if ($modifier_i) {
$parsed .= sprintf('{@{[mb::_ignorecase(qr%s%s)]}}%s', $regexp, $modifier_not_cegir, $modifier_cegr);
}
else {
$parsed .= sprintf('{@{[' . 'qr%s%s ]}}%s', $regexp, $modifier_not_cegir, $modifier_cegr);
}
}
# split m/^/ --> mb::_split qr/^/m
# split m/.../ --> mb::_split qr/.../
elsif (/\G ( m | qr ) \b /xmsgc) {
$parsed .= "qr";
if (/\G ( [#] ) /xmsgc) { $regexp = parse_re_endswith('m',$1); } # split qr#...#
elsif (/\G ( ['] ) /xmsgc) { $regexp = parse_re_as_q_endswith('m',$1); } # split qr'...'
elsif (/\G ( [\(\{\[\<] ) /xmsgc) { $regexp = parse_re_balanced('m',$1); } # split qr{...}
elsif (m{\G( [/] ) }xmsgc) { $regexp = parse_re_endswith('m',$1); } # split qr/.../
elsif (/\G ( [:\@] ) /xmsgc) { $regexp = ('`' . quotee_of(parse_re_endswith('m',$1)) . '`'); } # split qr@...@
elsif (/\G ( [\S] ) /xmsgc) { $regexp = parse_re_endswith('m',$1); } # split qr?...?
elsif (/\G ( \s+ ) /xmsgc) { $parsed .= $1; $regexp = $1; # split qr SPACE ...
t/corpus-stack/mb/lib/mb.pm view on Meta::CPAN
s'MBCS-regexp'MBCS-replacement'eegimosxr s{(\G${mb::_anchor})@{[mb::_ignorecase(qr'OO-regexp'mosx)]}@{[mb::_s_passed()]}}{$1 . mb::eval mb::eval q'OO-replacement'}egr
s'MBCS-regexp'MBCS-replacement'eegmosxr s{(\G${mb::_anchor})@{[qr'OO-regexp'mosx ]}@{[mb::_s_passed()]}}{$1 . mb::eval mb::eval q'OO-replacement'}egr
tr/MBCS-search/MBCS-replacement/cdsr s{[\x00-\xFF]*}{mb::tr($&,q/OO-search/,q/OO-replacement/,'cdsr')}ser
tr/MBCS-search/MBCS-replacement/cds s{[\x00-\xFF]+}{mb::tr($&,q/OO-search/,q/OO-replacement/,'cdsr')}se
tr/MBCS-search/MBCS-replacement/ds s{[\x00-\xFF]+}{mb::tr($&,q/OO-search/,q/OO-replacement/,'dsr')}se
y/MBCS-search/MBCS-replacement/cdsr s{[\x00-\xFF]*}{mb::tr($&,q/OO-search/,q/OO-replacement/,'cdsr')}ser
y/MBCS-search/MBCS-replacement/cds s{[\x00-\xFF]+}{mb::tr($&,q/OO-search/,q/OO-replacement/,'cdsr')}se
y/MBCS-search/MBCS-replacement/ds s{[\x00-\xFF]+}{mb::tr($&,q/OO-search/,q/OO-replacement/,'dsr')}se
qr'MBCS-quotee'cgimosx qr{\G${mb::_anchor}@{[mb::_ignorecase(qr'OO-quotee'mosx)]}@{[mb::_m_passed()]}}cg
qr'MBCS-quotee'cgmosx qr{\G${mb::_anchor}@{[qr'OO-quotee'mosx ]}@{[mb::_m_passed()]}}cg
split m'^' mb::_split qr{@{[qr'^'m ]}}
split m'MBCS-quotee'cgimosx mb::_split qr{@{[mb::_ignorecase(qr'OO-quotee'mosx)]}}cg
split m'MBCS-quotee'cgmosx mb::_split qr{@{[qr'OO-quotee'mosx ]}}cg
split qr'^' mb::_split qr{@{[qr'^'m ]}}
split qr'MBCS-quotee'cgimosx mb::_split qr{@{[mb::_ignorecase(qr'OO-quotee'mosx)]}}cg
split qr'MBCS-quotee'cgmosx mb::_split qr{@{[qr'OO-quotee'mosx ]}}cg
mb::split qr'^' mb::_split qr{@{[qr'^'m ]}}
mb::split qr'MBCS-quotee'cgimosx mb::_split qr{@{[mb::_ignorecase(qr'OO-quotee'mosx)]}}cg
mb::split qr'MBCS-quotee'cgmosx mb::_split qr{@{[qr'OO-quotee'mosx ]}}cg
qq/MBCS-quotee/ qq/OO-quotee/
qq'MBCS-quotee' qq'OO-quotee'
qx/MBCS-quotee/ qx/OO-quotee/
m/MBCS-quotee/cgimosx m{\G${mb::_anchor}@{[mb::_ignorecase(qr/OO-quotee/mosx)]}@{[mb::_m_passed()]}}cg
m/MBCS-quotee/cgmosx m{\G${mb::_anchor}@{[qr/OO-quotee/mosx ]}@{[mb::_m_passed()]}}cg
s/MBCS-regexp/MBCS-replacement/eegimosxr s{(\G${mb::_anchor})@{[mb::_ignorecase(qr/OO-regexp/mosx)]}@{[mb::_s_passed()]}}{$1 . mb::eval mb::eval q/OO-replacement/}egr
s/MBCS-regexp/MBCS-replacement/eegmosxr s{(\G${mb::_anchor})@{[qr/OO-regexp/mosx ]}@{[mb::_s_passed()]}}{$1 . mb::eval mb::eval q/OO-replacement/}egr
qr/MBCS-quotee/cgimosx qr{\G${mb::_anchor}@{[mb::_ignorecase(qr/OO-quotee/mosx)]}@{[mb::_m_passed()]}}cg
qr/MBCS-quotee/cgmosx qr{\G${mb::_anchor}@{[qr/OO-quotee/mosx ]}@{[mb::_m_passed()]}}cg
split /^/ mb::_split qr{@{[qr/^/m ]}}
split /MBCS-quotee/cgimosx mb::_split qr{@{[mb::_ignorecase(qr/OO-quotee/mosx)]}}cg
split /MBCS-quotee/cgmosx mb::_split qr{@{[qr/OO-quotee/mosx ]}}cg
split m/^/ mb::_split qr{@{[qr/^/m ]}}
split m/MBCS-quotee/cgimosx mb::_split qr{@{[mb::_ignorecase(qr/OO-quotee/mosx)]}}cg
split m/MBCS-quotee/cgmosx mb::_split qr{@{[qr/OO-quotee/mosx ]}}cg
split qr/^/ mb::_split qr{@{[qr/^/m ]}}
split qr/MBCS-quotee/cgimosx mb::_split qr{@{[mb::_ignorecase(qr/OO-quotee/mosx)]}}cg
split qr/MBCS-quotee/cgmosx mb::_split qr{@{[qr/OO-quotee/mosx ]}}cg
mb::split qr/^/ mb::_split qr{@{[qr/^/m ]}}
mb::split qr/MBCS-quotee/cgimosx mb::_split qr{@{[mb::_ignorecase(qr/OO-quotee/mosx)]}}cg
mb::split qr/MBCS-quotee/cgmosx mb::_split qr{@{[qr/OO-quotee/mosx ]}}cg
m:MBCS-quotee:cgimosx m{\G${mb::_anchor}@{[mb::_ignorecase(qr`OO-quotee`mosx)]}@{[mb::_m_passed()]}}cg
m:MBCS-quotee:cgmosx m{\G${mb::_anchor}@{[qr`OO-quotee`mosx ]}@{[mb::_m_passed()]}}cg
s:MBCS-regexp:MBCS-replacement:eegimosxr s{(\G${mb::_anchor})@{[mb::_ignorecase(qr`OO-regexp`mosx)]}@{[mb::_s_passed()]}}{$1 . mb::eval mb::eval q:OO-replacement:}egr
s:MBCS-regexp:MBCS-replacement:eegmosxr s{(\G${mb::_anchor})@{[qr`OO-regexp`mosx ]}@{[mb::_s_passed()]}}{$1 . mb::eval mb::eval q:OO-replacement:}egr
qr:MBCS-quotee:cgimosx qr{\G${mb::_anchor}@{[mb::_ignorecase(qr`OO-quotee`mosx)]}@{[mb::_m_passed()]}}cg
qr:MBCS-quotee:cgmosx qr{\G${mb::_anchor}@{[qr`OO-quotee`mosx ]}@{[mb::_m_passed()]}}cg
split m:^: mb::_split qr{@{[qr`^`m ]}}
split m:MBCS-quotee:cgimosx mb::_split qr{@{[mb::_ignorecase(qr`OO-quotee`mosx)]}}cg
split m:MBCS-quotee:cgmosx mb::_split qr{@{[qr`OO-quotee`mosx ]}}cg
split qr:^: mb::_split qr{@{[qr`^`m ]}}
split qr:MBCS-quotee:cgimosx mb::_split qr{@{[mb::_ignorecase(qr`OO-quotee`mosx)]}}cg
split qr:MBCS-quotee:cgmosx mb::_split qr{@{[qr`OO-quotee`mosx ]}}cg
mb::split qr:^: mb::_split qr{@{[qr`^`m ]}}
mb::split qr:MBCS-quotee:cgimosx mb::_split qr{@{[mb::_ignorecase(qr`OO-quotee`mosx)]}}cg
mb::split qr:MBCS-quotee:cgmosx mb::_split qr{@{[qr`OO-quotee`mosx ]}}cg
m@MBCS-quotee@cgimosx m{\G${mb::_anchor}@{[mb::_ignorecase(qr`OO-quotee`mosx)]}@{[mb::_m_passed()]}}cg
m@MBCS-quotee@cgmosx m{\G${mb::_anchor}@{[qr`OO-quotee`mosx ]}@{[mb::_m_passed()]}}cg
s@MBCS-regexp@MBCS-replacement@eegimosxr s{(\G${mb::_anchor})@{[mb::_ignorecase(qr`OO-regexp`mosx)]}@{[mb::_s_passed()]}}{$1 . mb::eval mb::eval q@OO-replacement@}egr
s@MBCS-regexp@MBCS-replacement@eegmosxr s{(\G${mb::_anchor})@{[qr`OO-regexp`mosx ]}@{[mb::_s_passed()]}}{$1 . mb::eval mb::eval q@OO-replacement@}egr
qr@MBCS-quotee@cgimosx qr{\G${mb::_anchor}@{[mb::_ignorecase(qr`OO-quotee`mosx)]}@{[mb::_m_passed()]}}cg
qr@MBCS-quotee@cgmosx qr{\G${mb::_anchor}@{[qr`OO-quotee`mosx ]}@{[mb::_m_passed()]}}cg
split m@^@ mb::_split qr{@{[qr`^`m ]}}
split m@MBCS-quotee@cgimosx mb::_split qr{@{[mb::_ignorecase(qr`OO-quotee`mosx)]}}cg
split m@MBCS-quotee@cgmosx mb::_split qr{@{[qr`OO-quotee`mosx ]}}cg
split qr@^@ mb::_split qr{@{[qr`^`m ]}}
split qr@MBCS-quotee@cgimosx mb::_split qr{@{[mb::_ignorecase(qr`OO-quotee`mosx)]}}cg
split qr@MBCS-quotee@cgmosx mb::_split qr{@{[qr`OO-quotee`mosx ]}}cg
mb::split qr@^@ mb::_split qr{@{[qr`^`m ]}}
mb::split qr@MBCS-quotee@cgimosx mb::_split qr{@{[mb::_ignorecase(qr`OO-quotee`mosx)]}}cg
mb::split qr@MBCS-quotee@cgmosx mb::_split qr{@{[qr`OO-quotee`mosx ]}}cg
m#MBCS-quotee#cgimosx m{\G${mb::_anchor}@{[mb::_ignorecase(qr#OO-quotee#mosx)]}@{[mb::_m_passed()]}}cg
m#MBCS-quotee#cgmosx m{\G${mb::_anchor}@{[qr#OO-quotee#mosx ]}@{[mb::_m_passed()]}}cg
s#MBCS-regexp#MBCS-replacement#eegimosxr s{(\G${mb::_anchor})@{[mb::_ignorecase(qr#OO-regexp#mosx)]}@{[mb::_s_passed()]}}{$1 . mb::eval mb::eval q#OO-replacement#}egr
s#MBCS-regexp#MBCS-replacement#eegmosxr s{(\G${mb::_anchor})@{[qr#OO-regexp#mosx ]}@{[mb::_s_passed()]}}{$1 . mb::eval mb::eval q#OO-replacement#}egr
qr#MBCS-quotee#cgimosx qr{\G${mb::_anchor}@{[mb::_ignorecase(qr#OO-quotee#mosx)]}@{[mb::_m_passed()]}}cg
qr#MBCS-quotee#cgmosx qr{\G${mb::_anchor}@{[qr#OO-quotee#mosx ]}@{[mb::_m_passed()]}}cg
split m#^# mb::_split qr{@{[qr#^#m ]}}
split m#MBCS-quotee#cgimosx mb::_split qr{@{[mb::_ignorecase(qr#OO-quotee#mosx)]}}cg
split m#MBCS-quotee#cgmosx mb::_split qr{@{[qr#OO-quotee#mosx ]}}cg
split qr#^# mb::_split qr{@{[qr#^#m ]}}
split qr#MBCS-quotee#cgimosx mb::_split qr{@{[mb::_ignorecase(qr#OO-quotee#mosx)]}}cg
split qr#MBCS-quotee#cgmosx mb::_split qr{@{[qr#OO-quotee#mosx ]}}cg
mb::split qr#^# mb::_split qr{@{[qr#^#m ]}}
mb::split qr#MBCS-quotee#cgimosx mb::_split qr{@{[mb::_ignorecase(qr#OO-quotee#mosx)]}}cg
mb::split qr#MBCS-quotee#cgmosx mb::_split qr{@{[qr#OO-quotee#mosx ]}}cg
/[abc 123]/xx m{\G${mb::_anchor}@{[qr/(?:@{[mb::_cc(qq[abc123])]})/xx ]}@{[mb::_m_passed()]}}
m/[abc 123]/xx m{\G${mb::_anchor}@{[qr/(?:@{[mb::_cc(qq[abc123])]})/xx ]}@{[mb::_m_passed()]}}
qr/[abc 123]/xx qr{\G${mb::_anchor}@{[qr/(?:@{[mb::_cc(qq[abc123])]})/xx ]}@{[mb::_m_passed()]}}
s/[abc 123]//xx s{(\G${mb::_anchor})@{[qr/(?:@{[mb::_cc(qq[abc123])]})/xx ]}@{[mb::_s_passed()]}}{$1 . qq //}e
split /[abc 123]/xx mb::_split qr{@{[qr/(?:@{[mb::_cc(qq[abc123])]})/xxm ]}}
split m/[abc 123]/xx mb::_split qr{@{[qr/(?:@{[mb::_cc(qq[abc123])]})/xxm ]}}
$` mb::_PREMATCH()
${`} mb::_PREMATCH()
$PREMATCH mb::_PREMATCH()
${PREMATCH} mb::_PREMATCH()
${^PREMATCH} mb::_PREMATCH()
$& mb::_MATCH()
${&} mb::_MATCH()
$MATCH mb::_MATCH()
${MATCH} mb::_MATCH()
${^MATCH} mb::_MATCH()
t/corpus/BATsh/lib/BATsh/Env.pm view on Meta::CPAN
# relative Unix path: prepend cwd
my $cwd = defined(&Cwd::cwd) ? Cwd::cwd() : '.';
$cwd =~ s{\\}{/}g;
$cwd =~ s{/+\z}{};
$path = "$cwd/$path";
}
# Ensure exactly one leading slash
$path = "/$path" unless $path =~ m{\A/};
# Collapse . and ..
my @segs;
for my $p (split m{/+}, $path) {
next if $p eq '' || $p eq '.';
if ($p eq '..') { pop @segs if @segs }
else { push @segs, $p }
}
$path = '/' . join('/', @segs);
$path = '/' if $path eq '/';
}
# --- split path into directory and filename ---
my ($dirs, $file) = ('', '');
( run in 0.917 second using v1.01-cache-2.11-cpan-71847e10f99 )