sub has_won returns Bool {
@letters == @solution.grep:{ $_ ne '' };
}
Methods with arguments require parens. However, the block to grep
isn't really an argument. It's describing the
manner in which the array will be grepped... that's an adverb to grep.
So, why are the parens required on methods? Take the following
if statements:
if @foo.shift { ... }
if @foo.grep { ... } # grep doesn't get the block
To make things clear, methods without parens are assumed to take no
arguments. In order to pass a block to the above grep, you either need
to use @foo.grep({ $^a <=> $^b}) or the adverbial colon:
if @foo.grep:{$^a <=> $^b} { ... }
Many thanks to Ashley Winters for his explanation of this