See primary documentation in context for The augment declarator
augment, you can add methods, but not attributes, to existing classes and grammars, provided you activated the
MONKEY-TYPING pragma first.
Since classes are usually
our scoped, and thus global, this means modifying global state, which is strongly discouraged. For almost all situations, there are better solutions.
# don't do thisuse MONKEY-TYPING;augmentsay 42.is-answer; # OUTPUT: «True␤»
(In this case, the better solution would be to use a function).
For a better, and safer example, this is a practical way to create a class module to extend
IO::Path by adding a currently missing method to yield the part of the
basename left after the
extension is removed. (Note there is no clear developer consensus about what to call that part or even how it should be constructed.)
unit is IO::Path;method new(|c)use MONKEY-TYPING;augment