在 rtf 文件的 perl 替换中的奇数替换行为



我正在尝试使用perl模块"RTF::Writer"来表示必须混合格式的文本字符串。事实证明,这比我预期的要复杂得多。我目前只是在尝试测试:

$rtf->paragraph( 'b', "Name: $name, lecf1 ngcf0 th $len" );

但这是写的:

{pard
b
Name: my_name, le'061 ng'060 th 7
par}

应该cf1'061的地方,应该cf0'060

然后我尝试用 perl 1 行来解决这个问题:

perl -pi -e "s/'06/cf/g"

但这让事情变得更糟,我不知道"^F"在 vi 中代表什么,但这就是它所显示的。

我是否逃脱了反斜杠并不重要。

谁能解释这种行为,该怎么办?

任何人都可以建议如何让 RTF::Writer 从一开始就根据需要创建文件?

谢谢

是双引号字符串文本中的特殊字符。如果你想要一个包含的字符串,你需要在文字中使用\。要创建字符串cf1,需要使用"\cf1"。("cf"表示 Ctrl-F,即字节06

或者,仅当后跟或单引号字符串文本中的分隔符时,它才是特殊的。因此,字符串cf1也可以从'cf1'创建。

两者都生成所需的字符串,但不生成所需的文档。那是因为还有第二个问题。

将字符串传递给 RTF::Writer 时,它应该是要呈现的文本。但是您正在传递一个您希望包含在最终文档中的字符串。如果要提供原始 RTF,则需要传递对字符串的引用。'...'"..."$str都产生对字符串的引用。

固定:

use RTF::Writer qw( );
my $name = "my_name";
my $rtf = RTF::Writer->new_to_file("greetings.rtf");
$rtf->prolog( 'title' => "Greetings, hyoomon" );
$rtf->paragraph( 'b', "Name: $name, le", 'cf1', "ng", 'cf0', "th".length($name));
$rtf->close;

调用paragraph的输出:

{pard
b
Name: my_name, lecf1
ngcf0
th7
par}

请注意,我没有使用以下内容,因为它将是代码注入错误:

$rtf->paragraph(("\b Name: $name, le\cf1 ng\cf0 th".length($name)));

不要使用...传递文本,例如$name的内容;仅将其用于原始 RTF。

最新更新