【发布时间】:2018-11-25 02:43:14
【问题描述】:
在 P5 中,我可以做这样的事情
my ($var1, $var2, $var3) = $string =~ /(.+)\s(.+)\s(.+)/;
如何在 Perl 6 中做同样的事情?如果我使用相同的语法,$var1 将保存整个 $string 值。
【问题讨论】:
在 P5 中,我可以做这样的事情
my ($var1, $var2, $var3) = $string =~ /(.+)\s(.+)\s(.+)/;
如何在 Perl 6 中做同样的事情?如果我使用相同的语法,$var1 将保存整个 $string 值。
【问题讨论】:
该匹配的结果是一个 Match 对象,它本身不会像列表一样,因此不会扩展到三个变量。但是,Match 对象有一个“列表”方法可以满足您的需求。这是一个例子:
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
还有几点需要指出:
words method 可能会满足您的需求。当然,您需要检查您到底想要什么:按空格分割?只返回字母字符,所以句号和逗号不在最终结果中?等comb method 实际上更有帮助?【讨论】:
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'
所以
my ($foo, $bar, $baz) = @($string ~~ /(.+)\s(.+)\s(.+)/);
【讨论】: