Quickly now, let’s consider the difference between a sub and a method . When programming Perl 6, the only significant difference between a sub and a method is that a method always takes at least one positional argument whereas a sub only takes what’s listed in the parameter list. In a method, the required first positional parameter is not passed as part of the parameter list, but assigned to self .

For example,

class Demo { has $.value; sub foo(Demo $val) is export { put $val } method bar() { put self } method Str() { ~$.value } } import Demo; my $demo = Demo.new(value => 42); foo($demo); # OUTPUT: «42» $demo.bar(); # OUTPUT: «42»

Ready for the trick? The subroutine can be called as a method too, like this:

$demo.&foo; # OUTPUT: «42»

That’s it. Any subroutine can be used as a method by using the .& operator to make the call. The object before the operation will be passed as the first argument.

My favorite usage of this feature is this one:

use JSON::Fast; my %data = "config.json".IO.slurp.&from-json;

There’s more, but I’m just posting this quickly.

Cheers.