Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

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

by eyepopslikeamosquito (Canon)
on Dec 07, 2012 at 10:31 UTC ( #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:


Comment on Re^2: Idiom to return 0 or random number of array elements
Select or Download Code
Re^3: Idiom to return 0 or random number of array elements
by tobyink (Abbot) 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
Node Status?
node history
Node Type: note [id://1007707]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (7)
As of 2014-09-03 02:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (35 votes), past polls