Perl 6 中的引号

作者: 焉知非鱼 | 来源:发表于2016-04-17 17:05 被阅读47次

除了 q 和 qq 之外,现在还有一种基本形式的 Q,它不会进行插值,除非显式地修改它那样做。所以,q 实际上是 Q:q 的简称,qq 实际上是 Q:qq 的简称。实际上所有的 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 的副词通过转换到不同的解析器改变了语言的解析。这能完全改变任何之后的副词还有所引起的东西自身的解释。

q:s//       Q :q :scalar //
rx:s//      Q :regex :scalar //

就像 q[...] 拥有简写形式的 '...', 并且 qq[...] 拥有简写形式的 "..." 一样,完整的 Q[...] 引用也有一种使用半角括号 「...」 的短形式。

引号上的副词

广义上的引号现在可以接收副词了:
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           作为命令执行并返回结果
:w          :words          按单词分割结果(没有引号保护)
                                     

:ww         :quotewords     按单词分割结果 (带有引号保护)
:v          :val            Evaluate word or words for value literals
:q          :single         插值 \\, \q 和 \' (or whatever)
                                    

:qq         :double         使用 :s, :a, :h, :f, :c, :b 进行插值
:s          :scalar         插值 $ vars
:a          :array          插值 @ vars
:h          :hash           插值 % vars

                        
:f          :function       插值 & 调用
:c          :closure        插值 {...} 表达式
:b          :backslash      插值 \n, \t, 等. (至少暗示了 :q )
:to         :heredoc        把结果解析为 heredoc 终止符
            :regex          解析为正则表达式
            :subst          解析为置换 (substitution)
            :trans          解析为转换 (transliteration)
            :code           Quasiquoting
:p          :path           返回一个 Path 对象 (查看 S16 获取更多选项)

通过在开头加入一个带有短形式的单个副词的 Q,q,或 qq,你可以省略掉第一个冒号,这产生了如下形式:

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// 不插值)

如果你想进一步缩写,那么定义一个宏:

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

关于上面我们现在有了一个推论,我们现在能说:

 %hash = qw:c/a b c d {@array} {%hash}/;

%hash = qq:w/a b c d {@array} {%hash}/;

把东西(items)插值到 qw 中。默认地,数组和散列在插值时只带有空格分隔符,所以之后的按空格分割仍旧能工作。(但是内置的 «...» 引号自动进行了等价于 qq:ww:v/.../ 的插值)。 内置的 <...> 等价于 q:w:v/.../

相关文章

  • Perl 6 中的引号

    除了 q 和 qq 之外,现在还有一种基本形式的 Q,它不会进行插值,除非显式地修改它那样做。所以,q 实际上是 ...

  • Perl 6 中的引号结构

    The Q Lang 在 Perl 6 中, 字符串通常使用一些引号结构来表示. 这些引号结构中,最简单的就是 Q...

  • Perl引号

    擦擦鞋,伸腿,准备开始踹开Perl大门 今天来个Perl引号 跟随命令敲起来

  • Perl 6 中的冒号

    Perl 6 Colons 在 Perl 6 中到处都是冒号, 我搜集了你在 Perl 6 中使用冒号的所有方式:...

  • Perl 6 - 正则替换

    想把 Desgin Perl 6 中的 pod/html 转为 Markdown 格式, Perl 6 的 po...

  • Typed hashes in Perl 6

    Typed hashes in Perl 6 在 Perl 6 中, 你可以通过指定变量的类型来限制变量容器的内容...

  • Perl 6 模块分析 - 并发查找文件

    第一次分析 Perl 6 中的模块, 学到很多东西。perl6-concurrent-file-find 是使用 ...

  • Perl 6 中的 multi

    Perl 6 中的 multi (函数) multi 声明符 Perl 6 允许你使用同一个名字但是不同签名写出几...

  • Perl 6 .rotor - 列表操作之王

    Perl 6 .rotor - The King of List Manipulation 对于 Perl 6 程...

  • Perl 6 - stackoverflowWeekly1014

    Perl 6 List Concatenation without Slip Perl 6 List Concat...

网友评论

    本文标题:Perl 6 中的引号

    本文链接:https://www.haomeiwen.com/subject/afbolttx.html