use Mojo::Base -strict, -signatures; use Mojo::DOM; use Mojo::Util qw/trim dumper/; my $dom = Mojo::DOM->new( do { local $/; } ); my %members; $dom->find('#members-list .item')->map(sub { # assume only one .item-title (use ->find instead of ->at otherwise) my $name = trim( $_->at('.item-title')->all_text ); $_->find('.woffice-xprofile-list .fa')->map(sub { my $class = $_->attr('class'); # go up one node from the to the my $content = $_->parent->all_text; # assume no duplicates $members{$name}{$class} = $content; }); }); print dumper(\%members);