[perl #115260] Stop length($obj) from returning undef
authorFather Chrysostomos <sprout@cpan.org>
Tue, 16 Oct 2012 23:07:19 +0000 (16:07 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Tue, 16 Oct 2012 23:07:19 +0000 (16:07 -0700)
commit0f43fd573c94446b795d95875cb722dd3f61d1fd
tree45028462f286a87b798eadf64ae531bee9076d39
parent6a97c51d3ccb6044a8e13896ba95a46e330ffa4b
[perl #115260] Stop length($obj) from returning undef

When commit 9f621bb00 made length(undef) return undef, it also made it
return undef for objects with string overloading that returns undef.

But stringifying as undef is a contradiction in terms, and this makes
length inconsistent with defined, which returns true for such objects.

Changing this allows is to simplify pp_length, as we can now call
sv_len_utf8 on the argument unconditionally (except under the bytes
pragma).  sv_len_utf8 is now careful not to record caches on magical
or overloaded scalars (any non-PV, in fact).

Note that sv_len is now just a wrapper around SvPV_const, so we use
SvPV_const_nomg, as there is no equivalent sv_len_nomg.
pp.c
t/op/length.t