\
- это специальный символ в строковых литералах в двойных кавычках. Если вам нужна строка, содержащая \
, вам нужно использовать \\
в литерале. Чтобы создать строку \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, le\cf1
ng\cf0
th7
\par}
Обратите внимание, что я не использовал следующее, потому что это будет ошибка внедрения кода :
$rtf->paragraph(\("\\b Name: $name, le\\cf1 ng\\cf0 th".length($name)));
Не передавайте текст, такой как содержимое $name
с использованием \...
; используйте это только для необработанного RTF.