> why is "private/public/protected" a must in front of every method and field ?
You can omit them, and then the member is package private.
You can omit them, and then the member is package private.
class A {
has $!bar; #private
has $.baz; #public (with autogenerated accessors)
method !foo {} #private
method foz {} #public
}