in reply to Re: A list returns its last, an array returns its weight ...
in thread A list returns its last, an array returns its weight

The lesson, of course, is that context propagates. It propagates into subroutine calls, down to the point where the sub would return; and it propagates into lists of all kinds.
@a = qw( x y ); # scalar(@a) == 2 @b = qw( foo bar quux ); print $b[ 0, @a ]; # prints "quux"
(For those of you who are more familiar with CSS, it could be said that context "cascades". :-)

jdporter
...porque es dificil estar guapo y blanco.

Replies are listed 'Best First'.
Re: Re: Re: A list returns its last, an array returns its weight ...
by mce (Curate) on Nov 13, 2002 at 12:30 UTC
    Hi,

    Indeed, and this is where wantarray comes in.


    ---------------------------
    Dr. Mark Ceulemans
    Senior Consultant
    IT Masters, Belgium

      Yeah. But the need for wantarray is, in my experience, rare indeed. Almost always, I'm happy to let the normal context handling do its thing. For example:
      # let array handle context. # list of items in list context, count of items in scalar. sub find_things { my( $storage, $criteria ) = @_; my @things = $storage->lookup( $criteria ); @things } # let grep handle context. # list of items in list context, count of items in scalar. sub matching_things { my( $storage, $pat ) = @_; grep /$pat/, $storage->things() }
      That's not to say that wantarray is never useful. For example, if building a result list is expensive, you can use wantarray to avoid that cost in scalar context.
      # list of items in list context, first item in scalar. sub matching_things { my( $input_iter, $pat ) = @_; my @things; while ( <$input_iter> ) { /$pat/ or next; wantarray or return $_; push @things, $_; } @things }

      jdporter
      ...porque es dificil estar guapo y blanco.