我编写了以下代码,以从每一行的文件名列表中读取文件并向其中添加一些数据。
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\n
。 chomp
删除\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/