0

一位同事注意到,当创建具有特定不可打印字符的文件时,perl 会替换它们。在这种情况下,\x09 被替换为 \x20。

echo `perl -e 'print "\x41"x40 . "\xc4\x09\x40"'` > test.out

当您查看生成的文件时:

xxd test.out

你看:

0000000: 4141 4141 4141 4141 4141 4141 4141 4141  AAAAAAAAAAAAAAAA
0000010: 4141 4141 4141 4141 4141 4141 4141 4141  AAAAAAAAAAAAAAAA
0000020: 4141 4141 4141 4141 c420 400a            AAAAAAAA. @.

注意最后 3 个字节是 \xc4、\x20、\x40 而不是 \xc4、\x09、\x40。没有人能够向我们解释这一点。获得 \x09 的唯一方法是使用十六进制编辑器手动编辑 test.out 文件。有什么想法吗?

4

1 回答 1

5

那是 shell 做的,不是 Perl。如果您引用命令替换,则选项卡将被保留:

echo "$(perl -e 'print "\x41"x40 . "\xc4\x09\x40"')"  > test.out

但我不知道你为什么在这里涉及外壳。最好echo完全离开,直接将 perl 运行到文件中。这意味着 perl 输出必须包含自己的换行符,但您可以通过多种方式做到这一点:

perl -e 'print "\x41"x40 . "\xc4\x09\x40\n"' > test.out

或者

perl -le 'print "\x41"x40 . "\xc4\x09\x40"' > test.out

或者

perl -E 'say "\x41"x40 . "\xc4\x09\x40"' > test.out
于 2013-11-11T17:25:43.607 回答