use strict; use warnings; my @strings = ('String A', 'String B', 'String C', 'String D', 'String E'); my %string_handles = map { open my $fh, '>', "$_.log" or die "Couldn't create '$_.log': $!"; $_ => $fh } @strings; open (my $in_fh, '<', 'input.txt') or die "Couldn't open input file!\n"; local $/ = ''; while (my $paragraph = <$in_fh>) { while (my ($string, $out_fh) = each %string_handles) { next unless index($paragraph, $string) >= 0; print {$out_fh} $paragraph; } } close $in_fh;