使用perl中的printf函数打印%字符

时间:2013-10-21 08:47:16

标签: perl printing printf

我有一个Perl脚本,它将包含几个句子(Sentences.txt)的文本文件作为输入。每个句子用白线分隔。该脚本为Sentences.txt中的每个句子创建单独的文本文件。例如,Sent1.txt中的第一个句子为Sentences.txtSent2.txt中的第二个句子为Sentences.txt,依此类推。

当我尝试使用Sentences.txt函数将SentX.txt中的句子打印到相应的单独文件(printf)并且该句子包含%字符时出现问题。我该如何解决这个问题?

这是代码:

#!/usr/bin/perl -w

use strict;
use warnings;

# Separate sentences
my $sep_dir = "./sep_dir";

# Sentences.txt
my $sent = "Sentences.txt";
open my $fsent, "<", $sent or die "can not open '$sent'\n";

# read sentences
my $kont = 1;
my $previous2_line = "";
my $previous_line = "";
my $mom_line = "";
while(my $line = <$fsent>){
    chomp($line);
    #
    $previous2_line = $previous_line;
    #
    $previous_line = $mom_line;
    #
    $mom_line = $line;
    if($mom_line !~ m/^\s*$/){
        # create separate sentence file
        my $fitx_esal = "Sent.$kont.txt";
        open my $fesal, ">", $fitx_esal or die "can not open '$fitx_esal'\n";
        printf $fesal $mom_line;
        close $fesal or die "can not close '$fitx_esal'.\n";
        $kont++;
    }
}
close $fsent or die "can not close '$sent'.\n";

2 个答案:

答案 0 :(得分:5)

如果您只想在找到它时放置句子,为什么不使用print?这与%没有问题。

如果需要printf,则需要使用%%替换每个%,例如使用

$sentence =~ s/%/%%/g;

答案 1 :(得分:2)

f中的printf代表“格式”,而非“文件”。你错过了格式参数。

printf $fesal "%s", $mom_line;

但你可以简单地使用

print $fesal $mom_line;

要以%格式加入(s)printf,请将其翻倍:%%