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