In P5, I am able to do something like this
my ($var1, $var2, $var3) = $string =~ /(.+)\\s(.+)\\s(.+)/;
How do I do the same in Perl 6? If I do the same syntax, the $var1 will hold the entire $string value.
The result from that match is a Match object, which by itself won't behave like a list, and therefore won't expand into the three variables. However, the Match object has a "list" method that does what you want. Here's an example:
my $string = "hello how are you";
my ($var1, $var2, $var3) =
($string ~~ /(.+)\s(.+)\s(.+)/).list;
say "$var1 and $var2 and $var3
# Output: hello how and are and you
A few further things to point out:
words
method does what you want. Of course, you'll want to check what exactly you want: Split by spaces? Only return alphabetic characters, so that periods and commas aren't in the final result? etc. comb
method is actually more helpful? my $string = 'foo bar baz';
my $match = $string ~~ /(.+)\s(.+)\s(.+)/;
say $match; # 'foo bar baz'
say $match[0]; # 'foo'
say $match[1]; # 'bar'
say $match[2]; # 'baz'
my ($foo, $bar, $baz) = @$match;
say $foo; # 'foo'
say $bar; # 'bar'
say $baz; # 'baz'
therefore
my ($foo, $bar, $baz) = @($string ~~ /(.+)\s(.+)\s(.+)/);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.