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