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

    I think your solution is fine.
    I think so too. But it's perl, I like to know I have options :P

    And I guess somehow Tie::Handle::Argv was the module I was looking for. Or at least the module I had forgotten about that could prove to be a solution to my non-problem. Thanks :)