で何をするつもりだったのかわかりませんが、 の内容は決して使用されないとqw
言えば十分です。@mass
@array = qw(hello world);
が 2 つの文字列とを@array
含むように定義されます。これは次の省略形です。hello
world
@array = ('hello', 'world');
というわけで
@array=qw(@mass);
評価('@mass')
結果は、5 文字の単一のリテラル文字列を含む配列@mass
です。
多分それはあなたが間違っていることです。試してみたらどうですか
@array = map { split /\s+/} @mass;
@mass
行のリストです。各行には、単語または文字のみがスペースで区切られています。最後の行が行うことは、各行を次のようにマップすることですsplit /\s+/
。これにより、各行が次のようにリストに分割さ'ba ab a G'
れ、単語/文字の単一のリストになります('ba', 'ab', 'a', 'G')
。@array
次に、それらをどのように並べ替えるかが問題です。他の回答も参照してください。
ああ、ファイルを書き出すときは、スペースを元に戻すことを忘れないでください。
print $new (join " ", @mass1);
各行を相互に依存して並べ替えたい場合は、それも簡単です。
$mass1 = join "\n", map { join " ", sort (split /\s+/) } @mass
これは、「のすべての行について@mass
、スペースで分割し、並べ替えてスペースで再び結合する」と読み、結果の配列で結合しnewline
て、ファイルの出力を生成します。
などsort
のコンパレータでドロップインできることに注意してください。sort { $a cmp $b }
ファイルが大きすぎる場合は、ループするのが賢明かもしれません:
for my $mass (<$old>) {
my $sorted_line = join " ", sort (split /\s+/, $mass);
print $new "$sorted_line\n";
}