In non-lvalue context, you can return the direct variable. It doesn't matter if the lvalue is "ever" modified -- only at that point when it is dereferenced. It isn't returned if you are taking a reference to it.
Sorry, but I think I've been more than patient. That's BS!
Its BS, because you cannot ever know if it is called "In non-lvalue context". Perl provides no mechanism to give you that information.
Wishing it were so does not make it so. Stridently concluded that "you can"; on the basis of your fantasy that you could if perl gave you the information; is stupid.
Stupid, because Perl cannot give you that information!.
Another attempt. This time, try reading the code and understanding it -- not your fantasy vision of it:
sub x :lvalue{ ...; $something } ... someFunc( x() );
The value returned from x() is passed to somefunc() as $_[0]; if somefunc() modifies $_[0], it also modifies $something within x(). Perl cannot know if it does!
And someFunc() might do someOtherFunc( $_[0] ); And if someOtherFunc() modifies it's version of $_[0], it will also modify $something in x().
And if someOtherFunc() calls someOtherOtherFunc( $_[0] ); And if someOtherOtherFunc() modifies it's version of $_[0], then it will also modify $something.
And if someOtherOtherFunc()....
It is not possible for Perl to delve into all the calling code; and all the code it calls, and all the code that code calls through to the end of the program run to determine if anything will/could/might modify the lvalue x() returns.
And wish and prevaricate as much as you like; it ain't never gonna happen.
In reply to Re^13: can sub check context for lvalue vs rvalue context?
by BrowserUk
in thread can sub check context for lvalue vs rvalue context?
by perl-diddler
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |