my $openfile = ''; foreach my $file (@file) { my $filename = $file->{filename}; my $content = $file->{content}; if ($filename ne $openfile) { $openfile = $filename; open(FILE, "> $filename") or die "Can't open $filename $!"; } print FILE $content; } close(FILE) if $openfile; #### for my $file (sort {$a->{filename} cmp $b->{filename}} @files) { ... } #### foreach my $file (@files) { my $filename ... my $content ... if (!$fh{filename}) { open $fh{filename}, "> $filename" or die ... } print {$fh{filename}} $content; } foreach my $fh (keys %fh) { close($fh{$fh}); }