为什么chomp()在这种情况下不起作用?

时间:2014-01-24 04:14:01

标签: perl chomp

我正在尝试使用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

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

谢谢

1 个答案:

答案 0 :(得分:5)

如果输入文件是在另一个平台(使用不同的EOL序列的平台)上生成的,chomp可能不会删除所有换行符。例如,如果您在Windows中创建了文本文件(使用\r\n)并在Mac或Linux上运行该脚本,则只有\n会被chomp()编辑,输出仍然会“看起来“就像它有新行。”

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

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