~$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-us...@perl.org> a écrit : > >> On Thu, Dec 20, 2018 at 5:17 PM ToddAndMargo via perl6-users > >> <perl6-us...@perl.org> wrote: > >>> > >>>>> El jue., 20 dic. 2018 21:43, ToddAndMargo via perl6-users > >>>>> <perl6-us...@perl.org <mailto:perl6-us...@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! >