Результатом этого сопоставления является объект Match, который сам по себе не будет вести себя как список, и поэтому не будет расширяться до трех переменных.Однако у объекта Match есть метод «list», который делает то, что вы хотите.Вот пример:
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
сделает то, что вы хотите.Конечно, вы захотите проверить, что именно вы хотите: Разделить пробелами?Вернуть только буквенные символы, чтобы точки и запятые не были в конечном результате?и т.д. - Если вам нужно несколько раз сопоставить одно и то же, может быть, метод
comb
на самом деле более полезен?