【问题标题】:Why doesn't chomp() work in this case?为什么 chomp() 在这种情况下不起作用?
【发布时间】:2014-01-24 04:14:00
【问题描述】:

我正在尝试使用 chomp() 从文件中删除所有换行符。代码如下:

    use strict;
    use warnings;

    open (INPUT, 'input.txt') or die "Couldn't open file, $!";
    my @emails = <INPUT>;
    close INPUT;

    chomp(@emails);

    my $test;
    foreach(@emails)
    {
      $test = $test.$_;
    }

    print $test;

而input.txt文件的测试内容很简单:

    hello.com
    hello2.com
    hello3.com
    hello4.com

我的预期输出是这样的:hello.comhello2.comhello3.comhello4.com

但是,我仍然得到与输入文件相同的内容,请帮忙?

谢谢

【问题讨论】:

  • 你在啃一根大绳子。
  • 不是 chomp(@emails) 选择列表吗?
  • 是的,您正在浏览列表中的每个元素。它按您对我的预期工作。
  • @shensw:是的,它正在对数组的每个元素进行 chomp。 $/ 变量设置为什么?这就是 chomp 删除的字符。如果是 DOS 格式的文件,每一行都会有 CR 和 LF(CHR(13) 和 CHR(10) 字符...你可以在文件上运行 dos2unix...
  • 我得到了你所说的期望的输出。如果您使用 Data::Dumper 之类的东西来打印您的数据结构,您可以看到换行符或缺少换行符的指示。

标签: perl chomp


【解决方案1】:

如果输入文件是在不同平台上生成的(使用不同 EOL 序列的平台),chomp 可能不会删除所有换行符。例如,如果您在 Windows 中创建文本文件(使用 \r\n)并在 Mac 或 Linux 上运行脚本,则只有 \n 会得到 chomp()ed 并且输出仍然“看起来”像有换行符.

如果你知道输入的EOL序列是什么,你可以在chomp()之前设置$/。否则,您可能需要执行类似的操作

my @emails = map { s/[\n\r]+$//g; $_ } <INPUT>;

【讨论】:

    猜你喜欢
    • 2017-11-26
    • 2010-12-29
    • 1970-01-01
    • 2021-08-05
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多