Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

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

by eyepopslikeamosquito (Chancellor)
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:

Replies are listed 'Best First'.
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?
[Eily]: and since his name is a modified version of astérisque (asterisk), which is a typographical symbol, I think it's even funnier that he would lose a diacritic
[Eily]: the pun doesn't work so well with "he lost a diacritic" though :P
[LanX]: Obelix might offer to find it again ...
[LanX]: not much to translate anyway since Goscinny died
[Eily]: https://en. wikipedia.org/ wiki/List_of_Aster ix_characters some of the names were changed to include a new pun
[LanX]: sure some are even funnier now
[LanX]: some lost because they were not translated like Epidemais
[LanX]: some of the english names are funny too

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (14)
As of 2017-05-24 15:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?