HTML::Parser->new(api_version => 3, handlers => [start => [\&tag, "self,tagname,attr"], end => [\&tag_end, "self,tagname,attr"], text => [\&text, "'$WEIGHT',dtext"] ], marked_sections => 1, )->parse($DATA) || die "Huh $!\n"; then my three subs: sub tag { my $self = shift; my $tagname = shift; my $attr = shift; my $stuff; if($tagname eq "meta") { if($attr{'name'} eq ("keywords" || "description")) { $stuff = $attr{'content'}; &text($WEIGHT, $stuff); } } elsif($tagname eq "title") { $WEIGHT = "2"; } } sub tag_end { my $self = shift; my $tagname = shift; my $attr = shift; if($tagname eq "title") { $WEIGHT = "1"; } }