~$0 *does *work with "perl6 -e" if you use correctly the tilde ~ operator.
For example:

$ perl6 -e ' "abc" ~~ /.(\w)./; say ~$0;'
b



Le jeu. 20 déc. 2018 à 23:44, ToddAndMargo via perl6-users <
perl6-users@perl.org> a écrit :

> >> On Thu, Dec 20, 2018 at 5:17 PM ToddAndMargo via perl6-users
> >> <perl6-users@perl.org> wrote:
> >>>
> >>>>> El jue., 20 dic. 2018 21:43, ToddAndMargo via perl6-users
> >>>>> <perl6-users@perl.org <mailto:perl6-users@perl.org>> escribió:
> >>>>>
> >>>>>      Hi All,
> >>>>>
> >>>>>      Exactly what is type "Match"?
> >>>>>
> >>>>>      Here I want $D0..$D3 to only be strings.  And it throws a match
> error.
> >>>>>
> >>>>>      $ p6 'my $x="11.2.3.4"; my Str $D0; my Str $D1; my Str $D2; my
> Str $D3;
> >>>>>      $x~~m{ (<:N>) [.] (\d+) [.] (\d+) [.] (\d+) }; $D0 = $0; $D1 =
> $1;
> >>>>>      $D2 =
> >>>>>      $2; $D3 = $3; print "$D0 $D1 $D2 $D3\n";'
> >>>>>
> >>>>>      Type check failed in assignment to $D0; expected Str but got
> Match
> >>>>>      (Match.new(from => 1, made ...)
> >>>>>          in block <unit> at -e line 1
> >>>>>
> >>>>>      Here is my work around:
> >>>>>
> >>>>>      $ p6 'my $x="11.2.3.4"; my Str $D0; my Str $D1; my Str $D2; my
> Str $D3;
> >>>>>      $x~~m{ (<:N>+) [.] (\d+) [.] (\d+) [.] (\d+) }; $D0 = $0.Str;
> $D1 =
> >>>>>      $1.Str; $D2 = $2.Str; $D3 = $3.Str; print "$D0 $D1 $D2 $D3\n";'
> >>>>>      11 2 3 4
> >>>>>
> >>>>>
> >>>>>      Many thanks,
> >>>>>      -T
> >>>
> >>> On 12/20/18 2:08 PM, JJ Merelo wrote:
> >>>> Put a wriggly ~ in front of $0 to turn it into a Str; it's the Str
> >>>> contextualizer
> >>>>
> >>>
> >>> Hi JJ,
> >>>
> >>> You did not actually answer the question I asked.  What is type
> "Match"?
> >>>
> >>> And I am missing something in your answer
> >>>
> >>> This works:
> >>>
> >>> $ p6 'my $x="11.2."; my Str $D0; my Str $D1; $x~~m{ (<:N>+) [.] (\d+)
> };
> >>> $D0 = $0.Str; $D1 = $1.Str;  print "$D0 $D1\n";'
> >>> 11 2
> >>>
> >>>
> >>> This does not.  One with a space after the ~, one without it.
> >>>
> >>> $ p6 'my $x="11.2."; my Str $D0; my Str $D1; $x~~m{ (<:N>+) [.] (\d+)
> };
> >>> $D0 ~$0; $D1 ~ $1;  print "$D0 $D1\n";'
> >>> WARNINGS for -e:
> >>> Useless use of "~" in expression "$D1 ~ $1" in sink context (line 1)
> >>> Useless use of "~" in expression "$D0 ~$0" in sink context (line 1)
> >>> Use of uninitialized value of type Str in string context.
> >>> Methods .^name, .perl, .gist, or .say can be used to stringify it to
> >>> something meaningful.
> >>>     in block <unit> at -e line 1
> >>> Use of uninitialized value of type Str in string context.
> >>> Methods .^name, .perl, .gist, or .say can be used to stringify it to
> >>> something meaningful.
> >>>     in block <unit> at -e line 1
> >>> Use of uninitialized value of type Str in string context.
> >>> Methods .^name, .perl, .gist, or .say can be used to stringify it to
> >>> something meaningful.
> >>>     in block <unit> at -e line 1
> >>> Use of uninitialized value of type Str in string context.
> >>> Methods .^name, .perl, .gist, or .say can be used to stringify it to
> >>> something meaningful.
> >>>     in block <unit> at -e line 1
> >>>
> >>> I am confused,
> >>> -T
>
> On 12/20/18 2:34 PM, Will Coleda wrote:
> > "Match objects are the result of a successful regex match, this does
> > include any zero-width match. They store a reference to the original
> > string (.orig), positional and named captures, the positions of the
> > start and end of the match in the original string, and a payload
> > referred to as AST (abstract syntax tree), which can be used to build
> > data structures from complex regexes and grammars." -
> > https://docs.perl6.org/type/Match
> >
> > When you say $0, you're using the Match. If you want the Str version,
> > explicitly cast it to Str with:
> >
> > ~$0
> >
> > or
> >
> > $0.Str
> >
> > Regards.
> >
>
> So similar to type "Mu".  Kind of all things but doesn't take on
> a particular type until you assign it to something.
>
> I will stick with $0.Str as ~$0 does not work with "perl6 -e".
> And .Str means something to me immediately.  ~ means concatenate
> strings to me, so it takes a bit of thinking.
>
> Thank you!
>

Reply via email to