in reply to Re^2: wantarray documentation in 5.8.7
in thread wantarray documentation in 5.8.7

So, the wantarray is used "at the top of the file", but it seems that wantarray is working fine. Can we rely on it?

No, we can't. That's exactly what the docs are saying, unequivocally. They say that this behavior is unspecified, i.e. "don't rely on it". The fact that it appears to work in your example does not in any way contradict this.

Let me give you another example, one that came up in a recent thread. The docs for undef clearly state (my emphasis)

undef EXPR
undef
Undefines the value of EXPR, which must be an lvalue. Use only on a scalar value, an array (using @), a hash (using %), a subroutine (using &), or a typeglob (using *).
Now, if I try this on v5.8.6:
undef @h{ 1, 2 };
it appears to work (i.e. $h{ 1 } and $h{ 2 } get set to undef). Still this code is using unspecified/undocumented behavior, because it is applying undef to a list, which is none of the documented valid arguments for undef. Hence, according to the docs, such code is liable to break in the future, and it would be considered a bad practice to use such code, that it appears to work notwithstanding.

the lowliest monk

Replies are listed 'Best First'.
Re^4: wantarray documentation in 5.8.7
by polettix (Vicar) on Jul 25, 2005 at 16:42 UTC
    Maybe I'm being pedant here, luckly this answer is on the 4-th indentation. My point of view is that I would like to understand why things work this way. I can be perfectly happy with the behaviour described in the docs, but I'd like to know why and I'd like that the docs would be clearer about this issue.

    If the issue is about context, I'd accept it. wantarray is a function dealing with context, and if the docs would say that if you have no context, you have no use for wantarray it makes perfectly sense for me.

    OTOH, if the docs talk about "top of file" (whatever this means, BTW), I'm not happy. I'd like to understand what "top of file" means, and also why this "top of file" invalidates the possible usage for wantarray even when I provide a context. In other words, I'm not willing to accept this behaviour blindly only because the docs say it's so. "Why doesn't this work?" - "Because no" isn't acceptable from a super-language like Perl, and is something that is definitively under the excellent Perl documentation standards.

    I appreciate your examples. But they simply talk about something that makes sense: use undef only on the "basic" types you have in Perl, not on "derived" ones like slices. I understand that there could be programming issues that make this a possible point of variations for the future, and also that a line between "basic" and "derived" is a well drawn line for things like that.

    Imagine if you found that you could use undef on all variables, except those whose name start by "T". Wouldn't this surprise you, and deserve at least a bit of elaboration?

    Flavio
    perl -ple'$_=reverse' <<<ti.xittelop@oivalf

    Don't fool yourself.
      Why? There isn't always an answer to the question, the perl5-porters would know for sure.