use strict; use warnings; use Web::Scraper; use Data::Dumper; my $sample = q{

July 12

Tim

Jon

July 13

James

Eric

Jerry

Susie

July 14

Kami

Darryl

}; my $names = scraper { process 'h4.bla', 'names[]' => sub { my $elem = shift; my $date = $elem->as_text; my @names = (); for my $node ($elem->parent->findnodes( "//p[preceding-sibling::h4[1][. = '$date']]" )) { push @names, $node->as_text; } return { $date => \@names }; }; }; my $res = $names->scrape( $sample ); print Dumper $res