【问题标题】:Perl 6: Backslashes in transliteration (tr///)Perl 6:音译中的反斜杠 (tr///)
【发布时间】:2018-10-26 11:43:45
【问题描述】:

我在尝试 tr/// 时注意到,它似乎不会翻译反斜杠,即使在转义时也是如此。例如,

say TR"\^/v"." given 'v^/\\';
say TR"\\^/v"." given 'v^/\\';
say TR"\ ^/v"." given 'v^/\\';

全部都是output...\而不是我所期望的....

还有一些其他奇怪的行为,比如\ 看似only escaping lowercase letters,但docs page 没有太多信息……反斜杠(\)在音译(@987654332)中的行为到底是什么@)?

【问题讨论】:

标签: raku transliteration


【解决方案1】:

有一个错误是由于反斜杠被吞没而不是正确地转义 tr/// 语法中的内容。

say TR/\\// given '\\'
===SORRY!=== Error while compiling:
Malformed replacement part; couldn't find final /
at line 2
------> <BOL>⏏<EOL>

我已经提出了https://github.com/rakudo/rakudo/issues/2456 并提交了https://github.com/rakudo/rakudo/pull/2457 来修复它。

答案的第二部分是 Perl 6 在某些引用结构中非常努力地尝试仅将 \ 解释为有效转义序列的转义,即 \n\r\s\'等。否则,它会保留为文字 \

【讨论】:

    【解决方案2】:

    我对观察到的问题没有任何解释。但是,当您使用 Perl 6 Str.trans 方法时,它看起来像预期的那样工作:

    say 'v^/\\'.trans( "\\^/v" => "." );
    

    Outputs:

    ....
    

    参考:

    【讨论】:

    • 我知道trans 例程(如果我想成为更多的正则表达式,我什至可以使用s:g///),但我的问题是关于tr/// 的行为。 trans 只需要 Pairs,字符串和正则表达式会事先以通常的方式进行评估。
    猜你喜欢
    • 2014-06-19
    • 2011-12-22
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    相关资源
    最近更新 更多