Although, I actually think a lot of the stuff Perl does is really cool. I wouldn't want to have to maintain a codebase of it, but it never fails to be interesting. Like the whatever star. "*.value" basically saying, "Whatever value is here, gimme the value of it". It's different from a typical lambda declaration, but intuitive in its own way.
Isn't it pretty similar to Scala's use of "_"? I think _.value creates a one-parameter lambda in Scala.
(* * *)(2, 3)
will happily print 6. > .map: ** * * * **
===SORRY!=== Error while compiling <unknown file>
Multiple HyperWhatevers and Whatevers may not be used together(map #(/ % 2) [2 4 6 8]) => (1 2 3 4)
(map #(% 2) [#(- 2 %) #(* 2 %)]) => (0 4)
(#(+ %1 %2 %3) 2 4 6) => 12
The following are identical with and without whatever:
perl6> "ACAGATAAATTA".comb.map: * ~ * ~ * ;
ACA GAT AAA TTA
perl6> "ACAGATAAATTA".comb.map({$^first ~ $^second ~ $^third});
ACA GAT AAA TTA
It's worth pointing out we're lucky that 'first' is lexically before 'second' in the second one though. The $^ consumes parameters in the lexical order of the variable names. So it's used normally for $^a $^b in sorting. So .sort({$^a cmp $^b}) versus .sort({$^b cmp $^a}). But a general feature was made rather than an obscure exception. In general Perl6 is very consistent. It might also just be a bit too crazy at times, some of the stuff you can do like the (* * *)(2,3) below you obviously would just not do in real life.So an example where the lexical ordering is kind of neat:
perl6> "ACAGATAAATTA".comb.map({$^third ~ $^second ~ $^first});
ACA TAG AAA ATT
Contrived since you could just split the string by three characters and flip it :P But hopefully you get the idea!