Stash is a hash that is used for symbol tables at the package scoping level in Raku.
To get a Stash, you can call the
.WHO pseudo-method on a package (because it answers the question who lives here?), or if you write the package name as a literal, append two colons:
say Boring::.^name; # OUTPUT: «Stash␤»say Boring.WHO === Boring::; # OUTPUT: «True␤»
Since it inherits from Hash, you can use all the usual hash functionality:
say Boring::.keys.sort; # OUTPUT: «(&package_sub Nested)␤»say Boring::<Nested>; # OUTPUT: «(Nested)␤»
As the example above shows only "our"-scoped things appear in the
Stash (nested classes are "our" by default, but can be excluded with "my".) Lexicals and methods are not included in a Stash, since they do not live in the package table. Lexicals live in a separate lexical pad, which is only visible from inside the scope. Methods (in the case that the package is also a class) have a separate method table, and are accessible through introspection on the class itself, via