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);
}
}