Documentation for infix but

Documentation for infix but, assembled from the following types:

language documentation Operators

From Operators

(Operators) infix but

multi sub infix:<but>(Mu $obj1Mu   $roleis assoc<non>
multi sub infix:<but>(Mu $obj1Mu:D $obj2is assoc<non>

Creates a copy of $obj with $role mixed in. Since $obj is not modified, but can be used to created immutable values with mixins.

Instead of a role, you can provide an instantiated object. In this case, the operator will create a role for you automatically. The role will contain a single method named the same as $obj.^name and that returns $obj:

say 42 but 'forty two'# OUTPUT: «forty two␤» 
my $s = 12 but class Warbles { method hi { 'hello' } }.new;
say $s.Warbles.hi;    # OUTPUT: «hello␤» 
say $s + 42;          # OUTPUT: «54␤» 

If methods of the same name are present already, the last mixed in role takes precedence. A list of methods can be provided in parentheses separated by comma. In this case conflicts will be reported at runtime.