Jonathan's answerを見て、新しい回答を投稿するのに十分奇妙なものを思いつきました。これは、適切なコードではなく、演習の例 (おそらく難読化) と見なす必要があることを付け加えておきます。ソリューションの功績はすべて Jonathan にあります。また、これは一番下で説明されているように、危険な解決策です。
perl -ple 'open STDOUT, $_' yourfile.txt
これは、 Jonathanが発見>seq1した古い 2-argumentopenで使用されるで始まる行に依存しています。たとえば、書き込み用にファイルを作成 (上書き) して開きます。open $fh, ">seq1"seq1
同時に、有効な「モード」記号 ( 、 など) を持たない行は、<デフォルト>で読み取り用に開かれ|ます。123 234 56ディレクトリを使用するopenと、サイレントに失敗し、以前に開いたSTDOUTファイル ハンドルを維持することができます。
-lオプションを使用するchomp $_ことで、openが失敗しないようにする必要も、印刷に改行を追加する必要もありません。同時に、-pオプションはwhileループの作成と印刷を処理します。
出力はデフォルトで にSTDOUT行われるため、ファイル ハンドルを再度開くだけSTDOUTで、残りは入力ファイルの内容によって処理されます。
このワンライナーの完全なコードと、どの部分がどのスイッチから来ているかを示すコメント:
BEGIN { $/ = "\n"; $\ = "\n"; } # -l, gives newlines to print
while (<>) { # -p
chomp $_; # -l
open STDOUT, $_; # our code
}
continue {
print STDOUT $_; # -p
}
注:このコードは、コマンドの全機能を解放しopenます。この場合、ファイル システムで任意のコマンドを実行できるようになるため、危険です。これは、2 引数オープンの使用を許可することの副作用です。