字符串连接的意外结果

Pra*_*hat 6 perl

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

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

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

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

}

close $info;
Run Code Online (Sandbox Code Playgroud)

abc.txt的内容

file1
file2
file3
Run Code Online (Sandbox Code Playgroud)

现在我期待我的代码给我以下输出

temp/file1.xml
temp/file2.xml
temp/file3.xml
Run Code Online (Sandbox Code Playgroud)

但相反,我得到输出

.xml/file1
.xml/file2
.xml/file3
Run Code Online (Sandbox Code Playgroud)

Rob*_*arl 7

您的文件有Windows行结尾\r\n.chomp删除\n(换行符)但离开\r(回车).Data::DumperUseqq您一起使用可以检查变量:

use Data::Dumper;
$Data::Dumper::Useqq = 1;
print Dumper($filename);
Run Code Online (Sandbox Code Playgroud)

这应该输出如下:

$VAR1 = "temp/file1\r.xml";
Run Code Online (Sandbox Code Playgroud)

正常打印时,将输出temp/file,将光标移动到行的开头并temp.xml.

要删除行结尾,请替换chomp为:

s/\r\n$//;
Run Code Online (Sandbox Code Playgroud)

或者如@Borodin所述:

s/\s+\z//;
Run Code Online (Sandbox Code Playgroud)

"具有为任何行终止符工作的优点,以及删除尾随空格,这通常是不需要的"

  • @RobEarl:`s /\s +\z //`具有为任何行终止符工作的优点,以及删除尾随空格,这通常是不需要的. (4认同)