Although I have found no documentation for it, apparently you can interpolate sigilless variables and constants surrounding them by {}:
constant ⲧ = " " xx 4;
say "{ⲧ}Tabbed"; # OUTPUT: « Tabbed»
Apparently, you need to use the :c
adverb to do so.
say q:c"π is {π}"; # OUTPUT: «π is 3.141592653589793»
But that is only within if q
(and derived) quotes are used. Is this simply an undocumented feature, or is something I'm missing here?
These are all exactly identical
"a $b {$c}"
qq "a $b {$c}"
Q :qq "a $b {$c}"
Q :double "a $b {$c}"
Q :b :s :a :h :c :f "a $b {$c}"
Q :backslash :scalar :array :hash :closure :function "a $b {$c}"
In order for the string literal parser to see {}
as creating a closure it needs the closure feature to be enabled.
One of the things that the :qq
/ :double
enables is :c
/ :closure
.
You can also disable it with :!closure
.
say qq :!closure "{ 1 + 2 }";
# { 1 + 2 }
That is it starts with :qq
/ :double
semantics and turns off :closure
semantics.
Here is where the qq
feature is defined in Rakudo
role qq does b1 does c1 does s1 does a1 does h1 does f1 {
token starter { \" }
token stopper { \" }
method tweak_q($v) { self.panic("Too late for :q") }
method tweak_qq($v) { self.panic("Too late for :qq") }
}
b1
enables backslashc1
enables closures1
enables scalara1
enables arrayh1
enables hashf1
enables function
It is documented, and you provided a link to the documentation.
Perhaps it could be made more clear that:
""
is short for qq ""
qq ""
is short for Q :qq ""
/ Q :double ""
:qq
/ :double
is short for all of :backslash
:closure
:scalar
:array
:hash
:function
.Also it may be worth adding examples for all of those features.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With