で何をするつもりだったのかわかりませんが、 の内容は決して使用されないとqw言えば十分です。@mass
@array = qw(hello world);
が 2 つの文字列とを@array含むように定義されます。これは次の省略形です。helloworld
@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";
}