use warnings; use strict; use IO::File; use diagnostics; my @handles; my @temp; foreach my $file ( glob( '*.input' ) ) { (my $out = $file) =~ s/\.input$/.output/; push @handles, [ (IO::File->new('<$file') || die "die here\n"), (IO::File->new('>$out') || die "die under\n"), ]; } #push @handles, [ (IO::File->new('new('>/tmp/hostlist') || die "die under\n"), ]; while (@handles) { @handles = grep { if (defined(my $line = $_->[0]->getline)) { print { $_->[1] } $line; } else { 0; } } @handles; }