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 引数オープンの使用を許可することの副作用です。