sub print_t{ my $fh = shift; sub{ for( @_[1..$#_] ){ map{ print { $_->[0] } $_->[1] } grep $_, [ $fh, "$_\n" ], $_[0] && [ *STDOUT, "$_[0] $_...\n" ] } 1 } } sub openLog{ local *OUT; open OUT, ">logs/$_[0]."; *OUT } my @print_subs = map{ print_t $_ } map{ openLog $_ } qw( error img_cs proc );