Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^2: Idiom to return 0 or random number of array elements

by eyepopslikeamosquito (Archbishop)
on Dec 07, 2012 at 10:31 UTC ( [id://1007707]=note: print w/replies, xml ) Need Help??


in reply to Re: Idiom to return 0 or random number of array elements
in thread Idiom to return 0 or random number of array elements

Just to clarify what is going on, notice that the scalar is not required in:

$stats{ scalar( x() ) }++
That is, this:
$stats{ x() }++
produces numbers in the 0..9 range, as BrowserUk's original did, while this:
$stats{ scalar( my @r = x() ) }++
produces numbers in the range 1..10 because this time the scalar context is getting the number of items in the array, in contrast to the earlier scalar context which was getting the value of the last element in the list.

For example, a run of this program:

use strict; use warnings; use Data::Dumper; my @array = 0 .. 9; sub x { return @array[ 0 .. int(rand @array) ] } my %stats; $stats{ scalar( my @r = x() ) }++ for 1 .. 1000; print Dumper( \%stats );
produced:
$VAR1 = { '6' => 81, '3' => 110, '7' => 84, '9' => 94, '2' => 96, '8' => 98, '4' => 89, '1' => 123, '10' => 117, '5' => 108

Update: For more detail on array vs list context see:

Replies are listed 'Best First'.
Re^3: Idiom to return 0 or random number of array elements
by tobyink (Canon) on Dec 07, 2012 at 12:29 UTC

    With $hash{...} a scalar context is imposed on the key. With a slice like @hash{...} list context is imposed on the key.

    use 5.010; use strict; sub WA { return wantarray } my %hash = ('' => 'Hello ', '1' => 'World'); say $hash{ WA() }, @hash{ WA() };
    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1007707]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (3)
As of 2024-03-19 07:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found