#!/usr/bin/perl -w use strict; $/ = ''; my %h; while (){ while ( s/((\d+) is good.+?)<(?:hr|HR)>//s ){ my $good = $1; my $key = $2; $good =~ s/\n?\s?<(?:BR|br).?.?>\n?/|/g; my @pot = split /\|/, $good; shift @pot; $h{$key} = [@pot]; } } use Data::Dumper; print Data::Dumper->Dump([\%h],[qw(*h)]); __DATA__
1 is good
useless data
useless data
useless data
useless data

2 is good
useless data
useless data
useless data
useless data

3 is not good
useless data
useless data
useless data
useless data

4 is good
useless data
useless data
useless data
useless data

5 is not good
useless data
useless data
useless data
useless data