sub formdata { my ($html,$formname) = @_; my $tp = HTML::TokeParser->new(\$html) or die "Bad HTML form"; while (my $form = $tp->get_tag('form')) { last if !$formname || ($form->[1]{name} eq $formname); $tp->get_text('/form'); } my @form; while (my $field = $tp->get_tag('input','select','textarea')) { my ($tag,$attr) = @$field; if ($tag eq 'textarea') { my $text = $tp->get_text('/textarea'); push @form,$attr->{name},$text; next; } if ($tag eq 'select') { my $selected; while (my $tok = $tp->get_token) { last if $tok->[-1] =~ m(/select)i; my ($typ,$tag,$att) = @$tok; next unless $typ eq 'S' && $tag eq 'option'; $selected = $att->{value} if exists $att->{selected}; } push @form,$attr->{name},$selected if defined $selected; next; } if ($attr->{type} =~ /hidden|password|text/) { push @form,$attr->{name},$attr->{value}; } if ($attr->{type} =~ /radio|checkbox/ && exists $attr->{checked}) { push @form,$attr->{name},$attr->{value}; } } @form; }