This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Clarify and correct description of comma operator in scalar context
authorIan Goodacre <Ian.Goodacre@xtra.co.nz>
Sat, 23 Oct 2010 04:42:55 +0000 (17:42 +1300)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 23 Oct 2010 06:21:39 +0000 (23:21 -0700)
commit28c5c15c9196adf231d52b99e78f3de3d7b63e2b
tree87adecb6da1b3920f01d83c583e1c0c2224dff95
parent0f2dddf9d5446ead8d477e583a8d2c0191df31e1
Clarify and correct description of comma operator in scalar context

The guarantee that in scalar context the comma operator evaluates its
arguments in scalar context is overstated.

In perl 5.10.0

print "Scalar assignment:\n";
$x = ( context(1), context(2), context(3) );

print "Scalar assignment in sub:\n";
sub list { ( context(1), context(2), context(3) ) }
$x = list();

sub context {

    if(wantarray) {
        print "list context\n";
    } elsif(defined(wantarray)) {
        print "scalar context\n";
    } else {
        print "void context\n";
    }
}

prints:

scalar assignment:
void context
void context
scalar context
Scalar assignment in sub:
scalar context
scalar context
scalar context

This leaves only the right argument of the last comma operator in a list as
the only one that might always be evaluated in scalar context.

The comments on the sample outputs were at best ambiguous if not misleading
or false, and also unnecessarily pejorative of perl4. The revised comments
less ambiguously refer to the last expression in the list (@y in the example)
rather than to the literal list that is the argument of the assignment
operator.
pod/perltrap.pod