string - Perl:向 $_ 添加字符串会产生奇怪的结果

标签 string perl

我写了一个 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/

相关文章:

python - 在 Python 中删除单个和多个换行符,只留下双换行符

Perl 不一致地打印包含 '%' 特定组合的字符串

perl - 如何让 Perl 一次从 STDIN 获取一个字符的输入?

linux - linux 支持 win32::OLE 吗?

javascript - 运行字符串 Javascript 中的代码

java - 在 Java 中解析 Windows 任务列表输出

java - 使用 GSON 在 Java 中解析 JSON 文件

perl - 在 Cacti 中从 Perl 脚本和图形创建和更新 RRD

perl - 如何安全地为 Perl 5.8.9 编译 Perl 5.12 模块?

sql - 如何删除表中特定列的第一个字符?