根据文档,print
和say
之间的唯一区别似乎是后者添加“\ n”(并使用.gist
字符串化)。然而,
perl6 -e 'print "del\b\b"'
打印“d”,有效地应用转义字符,而
perl6 -e 'put "del\b\b"'
将输出“del”(与say
相同)。除了.gist
和简单的.Str
之外,还有第三种字符串化方法吗?
事实上,\b
背后的任何角色都会让他们以同样的方式行事。那么为什么会发生这种情况呢?
FWIW,我在两种情况下都看到“del”,无论使用print
还是put
,所以可能有一些终端设置会影响行为?
当你真正把字符放在它们之后时,\b\b
才变得明显:
say "del\b\bo the right thing" # do the right thing
\b
仅将光标移回一个位置。它本身不会删除任何东西。如果你想要删除字符,你必须让它们后跟空格,然后如果你想再次使用任何文本,那么再次退格:
print "del\b\b \b\b" # d
要查看正在输出的内容,而不会混淆终端可能正在做什么,您可以通过xxd(或od)进行管道传输
$ perl6 -e 'say "del\b\b"' | xxd
00000000: 6465 6c08 080a del...
$ perl6 -e 'print "del\b\b"' | xxd
00000000: 6465 6c08 08 del..
$ perl6 -e 'put "del\b\b"' | xxd
00000000: 6465 6c08 080a del...