Filename1 Item1 - Answer
Filename2 Item1 - Answer
Filename1 Item2 - Answer
####
my %files;
$files{Filename1} = [ 'Item1 - Answer' ];
push @{ $files{Filename1} }, 'Item2 - Answer';
...
##
##
use strict;
use warnings;
use autodie;
# open the data file for reading
my $data_filename = 'data.txt';
open my $in_fh, '<', $data_filename;
# output files
my $current_filename = '';
my $out_fh;
while (<$in_fh>) # process one line of data
{
my ($new_filename, $item) = split ' ', $_, 2;
if ($new_filename ne $current_filename)
{
finalize_table($out_fh) if defined $out_fh;
open $out_fh, '>', $new_filename;
$current_filename = $new_filename;
initialize_table($out_fh);
}
add_row($out_fh, $item);
}
close $in_fh;
finalize_table($out_fh) if defined $out_fh;
sub initialize_table { ... }
sub add_row { ... }
sub finalize_table
{
my ($fh) = @_;
# ...
close $out_fh;
}