|Subject:||overload comparisons in NodeSet return strings|
|Date:||Fri, 29 Nov 2019 14:53:20 -0700|
|To:||bug-XML-XPath [...] rt.cpan.org|
|From:||Karl Berry <karl [...] freefriends.org>|
In XML::XPath::NodeSet.pm (current version 2.44 with perl-5.30.1, and all old versions I've checked), there is an overload pragma at the beginning which sets up most of the comparison operators to run &string_value or &to_number. I'm probably missing something, but so far as I can tell, these are not comparison functions. They evidently return the first string, or number, unconditionally. Thus, if $nval is a NodeSet object, the two expressions: ("somestr" eq $nval) and ("somestr" ne $nval) will both return the same thing, the string inside the NodeSet, and not 1 or 0. It was puzzling to have both eq and ne return perlish true (the string) given the same arguments. Sorry that I don't have a minimum runnable example (I don't have a simple way to construct the trees at hand). I can spend more time trying to create one if necessary, but the behavior seems apparent on inspection. If this behavior is intentional, I suggest that it would be worth documenting in the pod and/or comments. If not intentional, it would seem actual comparison fns need to be written. Semi-related: the cmp operator is not overloaded. Again, don't know if it's intentional, but all the other basic comparisons are there. Right now the result of ("somestr" cmp $nval) is: Operation "cmp": no method found, left argument has no overloaded magic, right argument in overloaded package XML::XPath::NodeSet Thanks for the software. --best, firstname.lastname@example.org.