"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. 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