In Functions§
See primary documentation in context for only.
The only keyword preceding sub or method indicates that it will be the only function with that name that inhabits a given namespace.
only sub you () {"Can make all the world seem right"};
This will make other declarations in the same namespace, such as
sub you ( $can ) { "Make the darkness bright" }
fail with an exception of type X::Redeclaration. only is the default value for all subs; in the case above, not declaring the first subroutine as only will yield exactly the same error; however, nothing prevents future developers from declaring a proto and preceding the names with multi. Using only before a routine is a defensive programming feature that declares the intention of not having routines with the same name declared in the same namespace in the future.
(exit code 1) ===SORRY!=== Error while compiling /tmp/only-redeclaration.raku Redeclaration of routine 'you' (did you mean to declare a multi-sub?) at /tmp/only-redeclaration.raku:3 ------> <BOL>⏏<EOL>
Anonymous subs cannot be declared only. only sub {} will throw an error of type, surprisingly, X::Anon::Multi.