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

Acs*_*sor 2 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";
Run Code Online (Sandbox Code Playgroud)

结果是:

(here is a newline)  
abcdefghijklmnopqrstuvwxyz
Run Code Online (Sandbox Code Playgroud)

希望它也适用于您的配置(如果您想下载我在我的代码中使用的文件,请转到此处)

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

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

TLP*_*TLP 7

首先获得换行符的原因是由于缺少括号而将其包含在排序中.改为:

print sort(keys %{$founds}), "\n";
Run Code Online (Sandbox Code Playgroud)

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

为了澄清:

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

  • @none完全没有.Perl是100%可预测的.如果Perl不在排序中包含换行符,那将是不可预测的.`sort()`与将列表作为参数的任何其他子例程没有什么不同:如果给它一个列表,它就会获取该列表.这是清晰的本质. (2认同)