我写了一个 super 简单的脚本:
#!/usr/bin/perl -w
use strict;
open (F, "<ids.txt") || die "fail: $!\n";
my @ids = <F>;
foreach my $string (@ids) {
chomp($string);
print "$string\n";
}
close F;
这将产生 ids.txt 的所有内容的预期输出:
你好
世界
这些
恼人的
源代码
线条
现在我想为每一行添加一个文件扩展名:.txt。这条线应该可以解决问题:
#!/usr/bin/perl -w
use strict;
open (F, "<ids.txt") || die "fail: $!\n";
my @ids = <F>;
foreach my $string (@ids) {
chomp($string);
$string .= ".txt";
print "$string\n";
}
close F;
但结果如下:
.txto
.txtd
.txt
.txtying
.txtcecode
不是将“.txt”附加到我的行中,而是将字符串的前 4 个字母替换为“.txt” 因为我想检查是否存在某些文件,所以我需要带有扩展名的完整文件名。
我尝试过砍、砍、替换 (s/\n//)、加入等等。但结果仍然是替换而不是追加。
错误在哪里?
最佳答案
Chomp 不会同时删除 \r
和 \n
如果文件有 DOS 行结尾并且您在 Linux/Unix 上运行。
您所看到的实际上是原始字符串、回车和扩展名,它会覆盖显示屏上的前 4 个字符。
如果传入文件具有 DOS/Windows 行结尾,则必须删除两者:
s/\R+$//
关于string - Perl:向 $_ 添加字符串会产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244808/