Perl 6:音译中的反斜线(tr ///)

时间:2018-10-26 11:43:45

标签: perl6 transliteration

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

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

所有人output ...\而不是我所期望的....

还有一些其他奇怪的行为,例如\似乎是only escaping lowercase letters,但是docs page并没有太多信息...反斜杠的确切行为是什么({{1 }})的音译(\)?

2 个答案:

答案 0 :(得分:6)

存在一个错误,该错误是由于反斜杠被吞咽而不是正确地转义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,{ {1}},\s等。否则,将其保留为文字\'

答案 1 :(得分:3)

我没有所观察到的问题的解释。但是,当您使用Perl 6 Str.trans方法时,它似乎可以正常工作:

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

Outputs

....

参考: