我编写了以下代码,以从每一行的文件名列表中读取文件并向其中添加一些数据。

open my $info,'<',"abc.txt";
while(<$info>){

    chomp $_;
    my $filename = "temp/".$_.".xml";

    print"\n";
    print $filename;
    print "\n";

}

close $info;

abc.txt的内容
file1
file2
file3

现在我期望我的代码能给我以下输出
temp/file1.xml
temp/file2.xml
temp/file3.xml

但是我却得到了输出
.xml/file1
.xml/file2
.xml/file3

最佳答案

您的文件具有Windows行尾\r\nchomp删除\n(Newline),但保留\r(Carriage return)。通过将 Data::Dumper Useqq结合使用,您可以检查变量:

use Data::Dumper;
$Data::Dumper::Useqq = 1;
print Dumper($filename);

这应该输出类似:
$VAR1 = "temp/file1\r.xml";

正常打印后,它将输出temp/file,将光标移至该行的开头,并用temp覆盖.xml

要删除行尾,请将chomp替换为:
s/\r\n$//;

@Borodin 指出:
s/\s+\z//;

“具有为任何行终止符工作以及删除尾部空白的优势,而后者通常是不希望的”

关于perl - 字符串连接的意外结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25384725/

10-12 07:34