You can only list one type as a return type. If there were a hypothetical Tuple type:
sub AddThree( Int $a, Int $b, Int $c --> Tuple[Str, Int] { my Int $d = $a + $b + $c; return Tuple[Str,Int].new( "a+b+c=", $d ); } my Int $X = 0; my Int $Y = 0; my Str $Z; Tuple[Str,Int].new( $X, $Y, $Y ) = AddThree( 1, 2, 3 ); say "X = <$X>\tY = <$Y>\tZ = <$Z>"; There could be a circumfix operator to generate the Tuple objects. You are dealing with Lists, which don't have a type specifier for their elements. On Wed, Jan 2, 2019 at 4:51 PM ToddAndMargo via perl6-users < perl6-us...@perl.org> wrote: > On 1/2/19 2:27 PM, ToddAndMargo via perl6-users wrote: > > On 1/2/19 2:11 PM, Simon Proctor wrote: > >> Have you tried defining your return values in the signature? > >> > >> sub AddThree( Int $a, Int $b, Int $c --> Int) {...} > >> > >> With this the compiler knows what your function is supposed to return > >> and can earn you in advance. > > > > I did and it blew up in my face so I stopped doing it. > > For example: > > $ cat RtnBooBoo2.pl6 > #!/usr/bin/env perl6 > > sub AddThree( Int $a, Int $b, Int $c --> Str, Int ) { > my Int $d = $a + $b + $c; > return ( "a+b+c=", $d ); > } > > my Int $X = 0; > my Int $Y = 0; > my Str $Z; > > ( $X, $Y, $Y ) = AddThree( 1, 2, 3 ); > say "X = <$X>\tY = <$Y>\tZ = <$Z>"; > > > > RtnBooBoo2.pl6 > ===SORRY!=== Error while compiling /home/linuxutil/./RtnBooBoo2.pl6 > Malformed return value (return constraints only allowed at the end of > the signature) > at /home/linuxutil/./RtnBooBoo2.pl6:3 > ------> AddThree( Int $a, Int $b, Int $c --> Str⏏, Int ) { >