#!/usr/bin/perl use strict; use warnings; my @files = qw{file1.txt file2.txt}; my %paragraphs; for my $file (@files){ open my $fh, q{<}, $file or die qq{cant open *$file* to read: $!\n}; local $/ = q{}; while (my $para = <$fh>){ chomp $para; push @{$paragraphs{$file}}, sprintf(q{
%s
}, $para); } } for my $file (sort keys %paragraphs){ printf qq{\n*** %s ***\n\n}, $file; for my $para (@{$paragraphs{$file}}){ print qq{$para\n\n}; } }