In Variables§
See primary documentation in context for The augment declarator
With 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