[PATCH] Make HTML::Form more extensible

Father Chrysostomos <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.lwp
Message-ID <[email protected]>
To whom it may concern:

I am trying to write a module that inherits some behaviour from  
HTML::Form but has a different internal structure. In order to make  
this work, I've changed instances of @{$self->{'inputs'}} to $self- 
 >inputs, $self->{'method'} to $self->method, etc., and other  
changes. Is this all right? All the tests pass. If you could release  
a new version of LWP with this patch applied, I would be very grateful.


Father Chrysostomos

P.S.: Please CC any replies to me so I don't have to subscribe. Thank  
you.
html-form.diff (application/octet-stream, 3.1 KB)
--- lib/HTML/Form.pm.orig	2007-09-21 12:54:06.000000000 -0700
+++ lib/HTML/Form.pm	2007-09-22 22:22:19.000000000 -0700
@@ -7,7 +7,7 @@ use URI;
 use Carp ();
 
 use vars qw($VERSION);
-$VERSION = sprintf("%d.%03d", q$Revision: 1.54 $ =~ /(\d+)\.(\d+)/);
+$VERSION = sprintf("%d.%03d", q$Revision: 1.55 $ =~ /(\d+)\.(\d+)/);
 
 my %form_tags = map {$_ => 1} qw(input textarea button select option);
 
@@ -390,12 +390,12 @@ sub find_input
     if (wantarray) {
 	my @res;
 	my $c;
-	for (@{$self->{'inputs'}}) {
+	for ($self->inputs) {
 	    if (defined $name) {
-		next unless exists $_->{name};
-		next if $name ne $_->{name};
+		next unless defined(my $n = $_->name);
+		next if $name ne $n;
 	    }
-	    next if $type && $type ne $_->{type};
+	    next if $type && $type ne $_->type;
 	    $c++;
 	    next if $no && $no != $c;
 	    push(@res, $_);
@@ -405,12 +405,12 @@ sub find_input
     }
     else {
 	$no ||= 1;
-	for (@{$self->{'inputs'}}) {
+	for ($self->inputs) {
 	    if (defined $name) {
-		next unless exists $_->{name};
-		next if $name ne $_->{name};
+		next unless defined(my $n = $_->name);
+		next if $name ne $n;
 	    }
-	    next if $type && $type ne $_->{type};
+	    next if $type && $type ne $_->type;
 	    next if --$no;
 	    return $_;
 	}
@@ -565,7 +565,7 @@ sub try_others
 {
     my($self, $cb) = @_;
     my @try;
-    for (@{$self->{'inputs'}}) {
+    for ($self->inputs) {
 	my @not_tried_yet = $_->other_possible_values;
 	next unless @not_tried_yet;
 	push(@try, [\@not_tried_yet, $_]);
@@ -595,9 +595,9 @@ of the form.  You might want to use the 
 sub make_request
 {
     my $self = shift;
-    my $method  = uc $self->{'method'};
-    my $uri     = $self->{'action'};
-    my $enctype = $self->{'enctype'};
+    my $method  = uc $self->method;
+    my $uri     = $self->action;
+    my $enctype = lc $self->enctype;
     my @form    = $self->form;
 
     if ($method eq "GET") {
@@ -658,7 +658,7 @@ sub click
     $name = shift if (@_ % 2) == 1;  # odd number of arguments
 
     # try to find first submit button to activate
-    for (@{$self->{'inputs'}}) {
+    for ($self->inputs) {
         next unless $_->can("click");
         next if $name && $_->name ne $name;
 	next if $_->disabled;
@@ -683,7 +683,7 @@ generated.
 sub form
 {
     my $self = shift;
-    map { $_->form_name_value($self) } @{$self->{'inputs'}};
+    map { $_->form_name_value($self) } $self->inputs;
 }
 
 
@@ -901,9 +901,9 @@ incorporated in the form value from this
 sub form_name_value
 {
     my $self = shift;
-    my $name = $self->{'name'};
-    return unless defined $name;
-    return if $self->{disabled};
+    my $name = $self->name;
+    return unless defined $name && length $name;
+    return if $self->disabled;
     my $value = $self->value;
     return unless defined $value;
     return ($name => $value);
@@ -1321,8 +1321,8 @@ sub headers {
 sub form_name_value {
     my($self, $form) = @_;
     return $self->SUPER::form_name_value($form)
-	if $form->method ne "POST" ||
-	   $form->enctype ne "multipart/form-data";
+	if uc $form->method ne "POST" ||
+	   lc $form->enctype ne "multipart/form-data";
 
     my $name = $self->name;
     return unless defined $name;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.