use strict; use warnings; use Data::Dumper; use HTML::TokeParser::Simple; my $p = HTML::TokeParser::Simple->new( *DATA ); my $count = 0; my @array; while ( my $token = $p->get_token ) { next unless $token->is_start_tag('li'); next unless ++$count > 3; while ( $token = $p->get_token ) { last if $token->is_end_tag('li'); my $text = $token->as_is; $text =~ s/^\s*//; $text =~ s/\s*$//; push @array, $text unless $token->is_tag('br'); } last; } print Dumper \@array; __DATA__