除了 q 和 qq 之外歇终,現(xiàn)在還有一種基本形式的 Q权纤,它不會進(jìn)行插值钓简,除非顯式地修改它那樣做乌妒。所以,q 實(shí)際上是 Q:q 的簡稱外邓,qq 實(shí)際上是 Q:qq 的簡稱撤蚊。實(shí)際上所有的 quote-like 形式都派生自帶有副詞的 Q 形式:
S02-literals/quoting.t lines 95–116
S02-literals/quoting.t lines 132–139
q// Q :q //
qq// Q :qq //
rx// Q :regex //
s/// Q :subst ///
tr/// Q :trans ///
諸如 :regex
的副詞通過轉(zhuǎn)換到不同的解析器改變了語言的解析。這能完全改變?nèi)魏沃蟮母痹~還有所引起的東西自身的解釋损话。
q:s// Q :q :scalar //
rx:s// Q :regex :scalar //
就像 q[...]
擁有簡寫形式的 '...', 并且 qq[...]
擁有簡寫形式的 "..." 一樣侦啸,完整的 Q[...]
引用也有一種使用半角括號 ?...? 的短形式。
引號上的副詞
廣義上的引號現(xiàn)在可以接收副詞了:
S02-literals/quoting.t lines 210–223
S02-literals/quoting.t lines 55–69
S02-literals/quoting.t lines 427–501
Short Long Meaning
===== ==== =======
:x :exec 作為命令執(zhí)行并返回結(jié)果
:w :words 按單詞分割結(jié)果(沒有引號保護(hù))
:ww :quotewords 按單詞分割結(jié)果 (帶有引號保護(hù))
:v :val Evaluate word or words for value literals
:q :single 插值 \\, \q 和 \' (or whatever)
:qq :double 使用 :s, :a, :h, :f, :c, :b 進(jìn)行插值
:s :scalar 插值 $ vars
:a :array 插值 @ vars
:h :hash 插值 % vars
:f :function 插值 & 調(diào)用
:c :closure 插值 {...} 表達(dá)式
:b :backslash 插值 \n, \t, 等. (至少暗示了 :q )
:to :heredoc 把結(jié)果解析為 heredoc 終止符
:regex 解析為正則表達(dá)式
:subst 解析為置換 (substitution)
:trans 解析為轉(zhuǎn)換 (transliteration)
:code Quasiquoting
:p :path 返回一個 Path 對象 (查看 S16 獲取更多選項(xiàng))
通過在開頭加入一個帶有短形式的單個副詞的 Q丧枪,q光涂,或 qq,你可以省略掉第一個冒號拧烦,這產(chǎn)生了如下形式:
qw /a b c/; # P5-esque qw// meaning q:w
Qc '...{$x}...'; # Q:c//, interpolate only closures
qqx/$cmd @args[]/ # equivalent to P5's qx//
(注意 qx// 不插值)
如果你想進(jìn)一步縮寫忘闻,那么定義一個宏:
macro qx { 'qq:x ' } # equivalent to P5's qx//
macro qTO { 'qq:x:w:to ' } # qq:x:w:to//
macro quote:<? ?> ($text) { quasi { {{{$text}}}.quoteharder } }
所有大寫的副詞被保留用作用戶定義的引號。所有在 Latin-1 上面的 Unicode 分隔符被保留用作用戶定義的引號恋博。
S02-literals/quoting.t lines 352–426
關(guān)于上面我們現(xiàn)在有了一個推論齐佳,我們現(xiàn)在能說:
%hash = qw:c/a b c d {@array} {%hash}/;
或
%hash = qq:w/a b c d {@array} {%hash}/;
把東西(items)插值到 qw 中。默認(rèn)地交播,數(shù)組和散列在插值時只帶有空格分隔符重虑,所以之后的按空格分割仍舊能工作。(但是內(nèi)置的 ?...? 引號自動進(jìn)行了等價于 qq:ww:v/.../
的插值)秦士。 內(nèi)置的 <...>
等價于 q:w:v/.../
缺厉。