我正在尝试使用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。