pipe は昔ながらの UNIX では普通は fork した子プロセスとの
通信で使っていた。シェルで | 記号使った時はシェルが
pipe() で繋げてくれる。

今ではマルチスレッドでも使えるが、とにかく pipe は
子プロセスとか別スレッドとかとやりとりをしたい場合に
使うものだ。同一プロセスでやりたいなら pipe は使うな。
普通に変数使ってメモリに保持するか、あるいはそれで
どうしてもやり辛いというのであればファイルを使っておけ。
File::Temp モジュールのやつで作業用ファイル作るとかな。