in reply to One to one file output idiom
I think your solution is fine. If you want to get fancy, you could use my Tie::Handle::Argv, which is the basis of my File::Replace::Inplace, an emulation of the -i switch (note: Perl v5.16 strongly recommended):
use warnings; use 5.016; package Tie::Handle::FancyThingy { use parent 'Tie::Handle::Argv'; use File::Basename qw/fileparse/; sub OPEN { my ($self, $origfn) = @_; my ($fn, $dirs, $ext) = fileparse($origfn, qr/\.[^\.]+$/); my $outfn = $dirs.$fn.'.out'; print STDERR "Debug: $origfn => $outfn\n"; open ARGVOUT, '>', $outfn or die "$outfn: $!"; select ARGVOUT; return $self->SUPER::OPEN($origfn); } sub inner_close { my $self = shift; select STDOUT; return $self->SUPER::inner_close(@_); } } tie *ARGV, 'Tie::Handle::FancyThingy'; while (<>) { chomp; say translate($_); } sub translate { return "<".shift.">" }
A more simplistic approach might be to just use the -i switch to write the "backup" (input) files to a different directory and then rename the output afterwards.
Minor edit to code: Replaced my $ofh (output filehandle) with the more appropriate ARGVOUT.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: One to one file output idiom
by Eily (Monsignor) on Jan 16, 2020 at 08:58 UTC |