in reply to Fastest I/O possible?

Well, this is pretty miniscule, but you did ask -- you could initialize vars outside of your loop (especially for @fields) to avoid destroying/creating a new variable each time; also, I think handling split() a fixed string '|' instead of a regex might be optimized further:
my ($file, $line, @fields); foreach $file (@files) { open(FILE, $file) or die "Nya, nya: $!\n"; while($line = <FILE>) { @fields = split('|', $line); print OUTPUT join("|", @fields); } }