2

さて、私のコードはかなり単純です。content + \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

あなたの設定でもそれが起こることを願っています(私のコードで使用したファイルをダウンロードしたい場合は、ここにアクセスしてください

とにかく、それについて何か知っていますか?

PS:正規表現では改行文字が許可されていないため、問題がそこにあるとは考えにくいです。

4

2 に答える 2

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()
于 2013-07-21T23:39:18.637 に答える
-2

perl では、すべての入力行の最後に改行があります。chompwhileループの最初のこととして行う必要があります

use strict;

my $founds; 

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

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

また、参照にアクセスするには -> 表記を使用する必要があります。読みやすくするために、% デリファレンスを中かっこで囲みます。

于 2013-07-21T23:37:54.943 に答える