while (/<([^>]+)>/g) { if ($1 eq '/r') { print Dumper(\%temp); undef %temp; } else { next unless $wanted{$1}; if (substr($1, 0, 1) eq '/') { my $text = substr($_,$pos,pos()-$pos-length($1)-2); $temp{substr($1, 1)} = $text; } else { $pos = pos(); } } }