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. On Wed, 2 Jan 2019, 20:04 ToddAndMargo via perl6-users <perl6-us...@perl.org wrote: > Dear Perl 6 Developers, > > Fedora 29, x64 > Xfce 4.13 > > $ perl6 -v > This is Rakudo version 2018.11 built on MoarVM version > 2018.11 implementing Perl 6.d. > > I am constantly improving (changing things) in my subs, > etc.. As such, the things I return often change. > > Because of this, I have a found something I just do not like > in the checker (Perl6 -c xxx) and the run time compiler. > > Here is a simplified sample code with the error in it: > > <code RtnBooBoo.pl6> > #!/usr/bin/env perl6 > > sub AddThree( Int $a, Int $b, Int $c ) { > my Int $d = $a + $b + $c; > return $d; > } > > my Int $X = 0; > my Int $Y = 0; > > ( $X, $Y ) = AddThree( 1, 2, 3 ); > say "X = <$X>\tY = <$Y>"; > </code RtnBooBoo.pl6> > > > The error is that the subroutine is only returning one > value and two are trying to be read. > > And the checker passes it! > > $ perl6 -c RtnBooBoo.pl6 > Syntax OK > > No, it is not okay. The sub and the caller do not match up! > > > If you run the flawed code, you get: > > $ RtnBooBoo.pl6 > Use of uninitialized value of type Int in string context. > Methods .^name, .perl, .gist, or .say can be used to stringify > it to something meaningful. in block <unit> at ./RtnBooBoo.pl6 > line 12 > > X = <6> Y = <> > > Which is a bizarre warning (it does not stop on this error). And > it is also not the error. The error was that the return line's > returned variables and the caller do not match up. Not an > uninitialized value. > > If you send too few variables to a sub, you get the finger shaken > at you. The return should also have the same checking capability. > > Would you guys please consider improving the checker and the compiler? > > Many thanks, > -T >