Robert: Thanks for your performance improvement suggestion. I did not think of giving Marshal $stdout. But the problem remains that I don't know ahead of time how many bytes the Marshal data will have and I can no longer use "\n", the input line separator, as a record separator. As for general usefulness. If you already have a general purpose cat, filter, transform, and sort programs... And just want to see the results of manipulating the contents of some source file.... Then just say cat source.txt | transform | filter | sort > result.txt I do these kind of stuff all the time, I just have not program that way before. I just started because the model is useful in my data downloads where I download history CSVs from Finance.Yahoo.com and along the way to append to my data files, I transform the data. There is an impedance problem though, in having to flatten and convert a data structure that contain floats, integers, and dates, back to a CSV line every time you go through the pipe, and then restore it back in the receiver. Marshal solves this, except that "\n" can no longer be used as record separators. Marshal is more efficient, that's why someone wrote it. Lastly, computer will be multi-processing from here on... Faster chips are finding their physical limits. BTW, I have an implementation of Marshal Pipes, just as I described in my opening email. It works great. -Carlos