Thread WWW::Mechanize und set_fields() (9 answers)
Opened by bianca at 2014-06-28 12:23

GwenDragon
 2014-06-28 13:01
#176187 #176187
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Code (perl): (dl )
$mech->set_fields($feldname2=>$val2) or die;

Das hängt mit WWW::Mechanize->set_fields() zusammen. Wenn $val 0 oder undef ist, liefert die Methode WWW::Mechanize->value() das gesetzte zurück und das die greift.
//EDIT: Und $feldname2 muss auch existieren im Formular!

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub set_fields {
    my $self = shift;
    my %fields = @_;
 
    my $form = $self->current_form or $self->die( 'No form defined' );
 
    while ( my ( $field, $value ) = each %fields ) {
        if ( ref $value eq 'ARRAY' ) {
            $form->find_input( $field, undef,
                         $value->[1])->value($value->[0] );
        }
        else {
            $form->value($field => $value);
        }
    } # while
} # set_fields()


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
sub value {
    my $self = shift;
    my $name = shift;
    my $number = shift || 1;
 
    my $form = $self->current_form;
    if ( $number > 1 ) {
        return $form->find_input( $name, undef, $number )->value();
    }
    else {
        return $form->value( $name );
    }
} # value


value() selbst benutzt HTML::Form->value()
und dort kräht eben Carp herum, wenn was nicht passt oder liefert undef je nach Modus (strict oder nicht).
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
sub value
{
    my $self = shift;
    my $key  = shift;
    my $input = $self->find_input($key);
    unless ($input) {
        Carp::croak("No such field '$key'") if $self->{strict};
        return undef unless @_;
        $input = $self->push_input("text", { name => $key, value => "" });
    }
    local $Carp::CarpLevel = 1;
    $input->value(@_);
}


Editiert von GwenDragon: Hinweis auf value() in HTML::Form; Quellcode
Last edited: 2014-06-28 13:14:38 +0200 (CEST)

View full thread WWW::Mechanize und set_fields()