while ( my ($key,$name) = get_key_and_name() ) { my @data; while ( my ($entry) = get_data_for_key($key) ) { push @data, { NUMBER => $entry->{NUMBER}, etc=>"etc" }; } my $data_tmpl = HTML::Template->new(filename => 'data.tmpl'); $data_tmpl->param(NAME => $name, DATA => \@data); write_file("/location/$key.html", $data_tmpl->output); }