Here is an experiment with Raku:
> my $x
(Any)
> my $y=1
1
> my @a=[1, 2]
[1 2]
> my %h=a=>\'b\'
{a => b}
> say \"nil\" unless $x
nil
>
When you use the REPL, the result of the expression is shown using say. The say function calls the .gist function on the expression.
Any is a type-object. Type-objects have a .gist method that puts the parentheses around them.
The put function is almost the same as the say function, but it calls the .Str function on the expression. And that produces a warning, because you cannot really stringify a type object. Observe the difference:
$ raku -e 'say Any'
(Any)
# raku -e 'put Any'
Use of uninitialized value of type Any in string context.
Methods .^name, .raku, .gist, or .say can be used to stringify it to something meaningful.
in block at -e line 1
See Classes and Objects, Type System, Type Objects for more information.