Python 的前缀 r"text" 的 Perl 对应字符串文字?

Perl's correspondent string literal for Python's prefix r"text"?

这个thread is about Python's string literal r, while this is about Perl's one here。 但是,我不确定在 Perl 中是否存在 Python 的前缀 r 的等效命令。

如何在 Perl 的字符串文字中等效地替换 Python 的前缀 r?

未插入的引用运算符 q{} 将帮助您完成大部分工作。只有几个细微差别。

  1. 定界符

    Python 原始字符串文字使用了四个定界符:

    • r"..."r'...'
    • r"""..."""r'''...'''

    Perl 中的 q... 运算符有更多种类的分隔符

    • 成对分隔符 q(...)q[...]q<...>q{...}
    • 常规分隔符可以是任何其他非字母数字的 7 位 ASCII 字符:q"..."q/.../q#...#
  2. 反斜杠

    反斜杠字符 \ 始终被解释为 Python 原始文字字符串中的文字反斜杠字符。它将转义一个字符,否则该字符将被解释为字符串的结束定界符

    r'Can\'t believe it\'s not butter'   =>   Can\'t believe it\'s not butter
    

    Perl q{...} 表达式中的反斜杠字符 \ 也是文字反斜杠,但有两个例外:

    • 反斜杠在分隔符前面

      q<18 \> 17 \< 19>     =>   18 > 17 < 19
      q#We're \#1#          =>   We're #1
      
    • 反斜杠在另一个反斜杠字符之前。在这种情况下,两个反斜杠字符的序列被解释为单个反斜杠。

      q[single \ backslash]           =>  single \ backslash
      q[also a single \ backslash]   =>  single \ backslash
      q[double \\ backslash]         =>  double \ backslash
      q[double \\ backslash]        =>  double \ backslash
      

有一种方法可以在 Perl 中创建真正的 "raw" 字符串:单引号 here-doc。

my $string = <<'EOS';
'"\foo
EOS 

这将创建字符串 '"\\foo<em>NEWLINE</em>.

(那么是否可以在 Python 中创建一个同时包含 '''""" 的原始字符串文字?)