Thank you Bruce,

This does indeed help.  Like I mentioned to Joseph I have yet to test it
but because it's coming out of the SF Study group I imagine it works.  ;)
I'll certainly make noise if it doesn't.

Appreciate the time given to a follow-up.

~Paul

On Sun, Nov 8, 2020 at 7:42 PM Bruce Gray <robertbrucegr...@gmail.com>
wrote:

> > On Fri, Nov 6, 2020 at 8:23 AM Paul Procacci <pproca...@gmail.com>
> wrote:
> > >
> > > So two example patterns are:
> > >
> > >
> [\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*
> > > [\\p{L}\\p{Z}\\p{N}_.:\\/=+\\-@]*
> > >
> > > To note, the RE's themselves cannot be changed as they are fed
> externally.
> > > Given that I'm stuck with these RE's which I believe are PCRE, It was
> my hopes to lean on perl to do the evaluation.
> > > Raku's perl regex engine is too old to interpret it properly, hence
> the shenanigans with Inline::Perl5.
>
> —snip—
>
> This came out of the San Francisco Raku study group, just now.
>
> # This part is the set-up to allow interpolation of the P5 regex into a
> callable sub.
> use Inline::Perl5;
> use MONKEY-SEE-NO-EVAL;
> my $regex_string = '\w'; # In reality, this comes from a file!
>
> # Returns 1e0 when True and Nil when False.
> my $is_valid_sub = Inline::Perl5.new.run("
>     sub \{
>         return \$_[0] =~ /$regex_string/;
>     \}
> ");
> # Wrapper to allow naming the sub (instead of anonymous sub in a variable),
> # and forces the return values to be the clearer Bool::True and
> Bool::False.
> sub is-valid ( $candidate --> Bool ) {
>     return ? $is_valid_sub.($candidate);
> }
>
> # Test what we have so far.
> say is-valid('abc').raku;
> say is-valid('^').raku;
>
> # You don't really need a subtype
> multi sub real-use-of-where ( $var1 where { is-valid($^var1) } ) {
>     say "This is definitely valid: $var1";
> }
> multi sub real-use-of-where ( $var1 ) {
>     say "Not valid: $var1";
> }
> # Test it.
> real-use-of-where('abc');
> real-use-of-where('^');
>
> # Now make the subset, and use it as a type. The `where` is no longer
> needed.
> subset test-set of Str where *.&is-valid;
> sub real-use-of-subsets ( test-set $var1 ) {
>     say "This is definitely a `test-set`: $var1";
> }
> sub real-use-of-subsets ( test-set $var1 ) {
>     say "Not a `test-set`: $var1";
> }
> # Test it.
> real-use-of-subsets('abc');
> real-use-of-subsets('^’);
>
> —
> Hope this helps,
> Bruce Gray (Util of PerlMonks)
>
>

-- 
__________________

:(){ :|:& };:

Reply via email to