![]() |
|
laziness, impatience, and hubris | |
PerlMonks |
Is this a bug in mechanize::select(), or am I just confused? (or something else) (answer: bad html)by rustycar (Novice) |
on Jul 31, 2008 at 01:47 UTC ( #701312=perlquestion: print w/replies, xml ) | Need Help?? |
rustycar has asked for the wisdom of the Perl Monks concerning the following question:
Sorry in advance for such a long post here... I'm using select() to select an item from a 'select' list (duh! :-) - but I do not know ahead of time what the names of said items are. So, I wrote something like this: However, it turns out that select will ALWAYS think that it can select entry 1, even if the list is empty. In other words, even when the html looks like this: The above code will get '1' back from select and go running on forever. Not a good thing... I discovered that if entry 2 didn't exist, and you tried to select THAT entry you'd get an appropriate error, so I ended up with this as a workaround: It seems to me that the first form should have worked (see the Mechanize page under select() for details of why - won't bore everyone here with that), so I'm looking at the Mechanize and Form code to see why it allows a 'select' of 1 when there are no items. I've looked at WWW::Mechanize, and the issue seems to be in Form instead. Here is the section that seems to be involved here: When there is nothing in the select list, the above test still passes! I note, when stepping through the code, that if I print $val when I'm looking at the 'big if' above, I get a blank line, BUT defined($val) is true! So, am I just confused, is the above test wrong, is my code wrong, or ??? (Conclusion: the HTML is wrong - its illegal to have a select with no option. You should have a single empty option, and detect that its an empty option (I'll have to RTFM for how to do that, but that's just Fine :-) Thanks! Final comment - thanks to Hermit (psini for his/her help - and sorry for not thinking to RTFM on how HTTP select fields work, once the comment was made (too focussed on Mechanize::select and figuring out how to get around having no (obvious) way to tell when there's nothing there.... Anyway, I consider this thread finished (and now I know what bug to file with the authors). I've modified the subject, at the suggestion of ambrus, to make it better. Thanks again!
Back to
Seekers of Perl Wisdom
|
|