Just a small stylistic thing to mention:
On Thu, Jun 14, 2018 at 1:59 AM Todd Chester <[email protected]> wrote:
p6
> if not $dir.IO.d.bool {}
> for slice "\n", $WebStr -> $Line { }
>
> and on and on and so forth. I know a lot of them by heart now.
>
By .bool, I assume you meant .Bool, but in any case, it isn’t necessary
since the context of a not forces it to be boolean.
If you want the opposite—a boolean without the sense-negation, you can use
so, but in the context of an if, it should rarely, if ever, be necessary.
In the same way that so is used to explicitly truthify, unary + is used to
explicitly numify.
E.g., once you know that an IntStr <https://docs.perl6.org/type/IntStr>
dual value gives a result reminiscent of Perl 5’s string numbers (except
that without going to crazy lengths, you can easily supply exactly the
number and string you want):
my $x = IntStr.new(42, "The Answer");
my $y = IntStr.new(0, "Nothing");
for ($x, $y) -> $z {
printf "\$z: '%s', so \$z: '%s', +\$z: '%s'\n",
$z, so $z, +$z;
say " Double it: ", $z * 2;
say " or 'double' it: ", $z x 2;
}
gives results:
$z: 'The Answer', so $z: 'True', +$z: '42'
Double it: 84
or 'double' it: The AnswerThe Answer
$z: 'Nothing', so $z: 'False', +$z: '0'
Double it: 0
or 'double' it: NothingNothing
In case you’re wondering, you’ll usually have no reason to explicitly
construct a dual value like that; you generally get a NumStr or its
counterparts like IntStr when reading input or expecting command-line
arguments.
(Also note that the stringification equivalent to so and unary + is ~, but
it wasn’t necessary above since the %s template to sprintf forces
stringification. Also note that using s/printf at all is not encouraged—but
it was useful above, just to make things explicit.)