foreach my $file (@files) { my $outfile_fname = $file.".html"; # output file name open ( my $out_handle, '>', "result_dir/$outfile_fname" ) or croak "$0 : failed this file $outfile_fname : $!\n"; my $result = process($file); # You should check the return value on any file I/O operation print $out_handle $result or croak "Failed to print to $outfile_fname"; close ( $out_handle ) or croak "Failed to close $outfile_fname"; }