regmust#
Return the longest anchored and longest floating fixed strings the optimiser extracted from a compiled pattern.
A fixed string is a substring that must appear in any string that matches. An anchored fixed string is one whose offset from the start of the match is known; a floating fixed string can appear anywhere in a range of positions. The optimiser uses whichever it finds - preferring the longer, or the floating one if they are the same length - to skip positions that cannot match.
Σύνοψη#
use re 'regmust';
my ($anchored, $floating) = regmust(qr/here .* there/x);
## $anchored = 'here', $floating = 'there'
Τι επιστρέφεται#
A two-element list ($anchored, $floating). Each element is either the fixed-string text as an SV or &PL_sv_no (the false-but-defined sentinel) when the optimiser has no fixed string of that kind. Returns undef if the argument is not a compiled pattern or its engine is unknown.
Παραδείγματα#
my ($a, $f) = regmust(qr/foo\s+bar/); # $a = 'foo', $f = 'bar'
my ($a, $f) = regmust(qr/\d+/); # no fixed strings - both false
my @got = regmust("not a regex"); # empty list - ref wasn't a qr//
Οριακές περιπτώσεις#
Argument is not a
qr//- returnsundef.Pattern’s engine is not the core engine - returns
undef.Pattern has only one kind of fixed string - the other slot is
&PL_sv_no(false but defined).UTF-8 substrings are returned as-is; the optimiser stores the UTF-8 form in a separate slot and this function prefers the byte form when both are present.
Διαφορές από το upstream#
The returned fixed strings are the values picked by this build’s optimiser; upstream’s POD notes that the exact result is optimiser-dependent and may change between Perl versions. The same caveat applies here.