my @file_data = ( [ undef, "${file}.txt", 'r' ], [ undef, "${file}1.txt", 'w' ], ); foreach (@file_data) { my $name = $_->[1]; my $mode = $_->[2]; $_->[0] = IO::File->new($name, $mode) or die("Can't " . ($mode eq 'w' ? 'create' : 'open') . " file $name: $!\n"); } while (<$file_data[0][0]>) { print $file_data[1][0] $_; } close($_->[0]) foreach @file_data;