my %fh; # key: path, value: filehandle if ($cond1) { my $text = "text1\n"; $text .= somefunc(); # whatever append($path1, $text); } elsif ($cond2) { my $text = "some other text\n"; append($path2, $text); } elsif (...) { ... } else { ... } # when done: close $fh{$_} for keys %fh; sub append { my ($path, $text) = @_; unless ( exists $fh{$path} ) { open my $fh, '>>', $path or die "Can't append to $path: $!\n"; $fh{$path} = $fh; } print {$fh{$path}} $text; }