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
>

Reply via email to