in reply to perl -i -pe ... with eof() testing
eof (any form) performs a read if there's nothing in the handle's buffer. If you're at the end of the last file in @ARGV during a read of ARGV, ARGV moves on to the next file. The file to which you want to add is now closed.
Based on black box testing, reading from ARGV (include when done via eof()) under -i is pretty close to
#XXX Doesn't handle empty @ARGV sub fill_argv { if (!eof(ARGV)) { return 1; } while (@ARGV) { $ARGV = shift(@ARGV); if (!open(ARGV, '<', $ARGV)) { warn("Can't open $ARGV: $!"); next; } if (!unlink($ARGV)) { warn("Can't remove $ARGV: $!, skipping file.\n"); next; } if (!open(ARGVOUT, '>', $ARGV)) { warn(???); next; } select(ARGVOUT); return 1; } $ARGV = undef; close(ARGVOUT); select(STDOUT); return 1; }
OT trivia: Note how it always returns success since it always handles errors itself.
Update: Added expansion of reading from ARGV under -i. And then did some tweaks.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: perl -i -pe ... with eof() testing
by Anonyrnous Monk (Hermit) on Feb 08, 2011 at 19:57 UTC | |
by ikegami (Patriarch) on Feb 08, 2011 at 20:05 UTC | |
by Anonyrnous Monk (Hermit) on Feb 08, 2011 at 20:38 UTC |