in reply to Re^2: perl -i -pe ... with eof() testing
in thread perl -i -pe ... with eof() testing

The only way (eof) can check for per-file eof as documented would be if it read from the real file handle instead of the magical handle. The magical handle doesn't move to the next file because it's not used.

Replies are listed 'Best First'.
Re^4: perl -i -pe ... with eof() testing
by Anonyrnous Monk (Hermit) on Feb 08, 2011 at 20:38 UTC

    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 :)