Вывод .perl
правильный.Foo.new( :3bar )
делает не делает то, что вы думаете.Если вы добавите method bar() { $!bar }
, вы заметите, что приватный атрибут $!bar
did not будет установлен:
class Foo {
has $!bar;
method bar() { $!bar }
}
say Foo.new( :3bar ).bar; # (Any)
say Foo.new( :3bar ).perl; # Foo.new
Именованный параметр :3bar
(он же bar => 3
)) игнорируется, потому что нет атрибута public с именем bar
.
Если вы хотите, чтобы он жаловался на эту ситуацию, то, возможно, https://modules.perl6.org/dist/StrictNamedArguments что-тодля вас.