Thanks, you're right.
Just for the record: I had confused myself unnecessarily by not putting a
separator in between the cat of file1 and file2. Which made me
wonder why the magical file handle is only being advanced by eof() at
the very end, and not at every file boundary.
When you do it properly, however, i.e. something like
cat file1
echo ---
cat file2
the output is
...
--- perl output to stdout ---
line3
opt=bar
--- cat after ---
line1
line2
---
line3
line1
line2
which shows that line3 of the first file does in fact belong to file2 after the processing...
P.S. I've now settled on suggesting my collegue
perl -i -pe '$f||=s/opt=.*/opt=bar/; $_.="opt=bar\n" if !$f && !@ARGV
+&& eof' files...
(but unfortunately it took a little too long to get working to leave an "it's easy with Perl" impression — that's my fault, however :) |