ほとんど同じですが、実装の詳細が異なります。
パイプを開いてtee some_file.out
新しいプロセスをフォークし、その中で Unix / Linux ユーティリティ プログラムtee(1)
を実行します。このプログラムは、標準入力 (つまり、パイプに書き込むもの) を読み取り、それsome_file.out
を標準出力 (プログラムから継承) と同様に両方に書き込みます。
tee
明らかに、これは Windows や、Unix スタイルのコマンドを提供しない他のシステムでは機能しません。
一方、 File::Teeモジュールは純粋な Perl で実装されており、外部プログラムには依存しません。ただし、そのドキュメントによると、新しいプロセスをフォークし、その下で本質的に Unix コマンドの Perl 再実装であるものを実行することによっても機能します。tee
ドキュメントに記載されているように、これにはいくつかの利点があります。
「これはforkの周りに実装されており、ティー化されたすべてのストリームに対して新しいプロセスを作成します。そのようにして、システムで実行される外部プログラムまたはperlioを通過しない XS モジュールによって生成された出力の処理に問題はありません。」
一方、 の使用にfork
はマイナス面もあります。
「バグ
Windows では動作しません (パッチを歓迎します)。"
tee
すべてのプラットフォームで動作する機能の純粋な Perl 実装が必要な場合は、代わりにIO::Teeの使用を検討してください。File::Tee とは異なり、このモジュールは PerlIO を使用して実装され、fork
. system
残念ながら、これは、 PerlIO をバイパスする XS モジュールで実行される外部プログラムの出力を正しくキャプチャできない可能性があることも意味します。