无法弄清楚为什么perl打印出换行符然后打印数据而不是反之亦然

时间:2013-07-21 23:27:47

标签: perl stdout

嗯,我的代码非常简单。它应该打印内容+ \ n但结果却以某种方式反转。

这里是代码:

#!/usr/bin/perl -w 

use strict;

my $founds; 

while (<>){ 
    $$founds{$2} = $& while  m/([A-Z]{3})([a-z])([A-Z] {3})/g;                               
}

print sort keys %$founds, "\n";

结果是:

(here is a newline)  
abcdefghijklmnopqrstuvwxyz

希望它也适用于您的配置(如果您要下载我在我的代码go here上使用的文件)

无论如何,你对此有所了解吗?

P.S:正则表达式不允许换行符,因此问题不太可能属于它。

2 个答案:

答案 0 :(得分:7)

首先获得换行符的原因是由于缺少括号而将其包含在排序中。这样做:

print sort(keys %{$founds}), "\n";

换行首先是巧合(或者更确切地说,是因为在非空白之间是空白字符)。

澄清:

my %found = ( foo => 1, bar => 1 );   # keys returns "foo", "bar"
print sort keys %found, "\n";         # sort gets "foo", "bar", "\n"
         # ^^^^^^^^^^^^^^^^^----------- arguments to sort()

答案 1 :(得分:-2)

perl中每个输入行的末尾都有换行符。你需要做chomp作为你的while循环中的第一件事

use strict;

my $founds; 

while (<>){ 
   chomp;
   $founds->{$2} = $& while  m/([A-Z]{3})([a-z])([A-Z] {3})/g;                               
}

print sort keys %{$founds}, "\n";

你还应该使用 - &gt;访问引用的表示法,我会在括号中附加%dereference来帮助读取易读性