in reply to Effect of scalar function on hash

To make it change, force perl to make more buckets by adding more items to the hash.
>perl -le "for ('a'..'z') { $h{$_}=1; print scalar %h } 1/8 2/8 3/8 4/8 5/8 6/8 7/8 8/16 9/16 10/16 11/16 12/16 13/16 14/16 15/16 16/32 17/32 18/32 19/32 20/32 21/32 22/32 23/32 24/32 25/32 26/32
Note that sometimes, buckets will be reused:
>perl -le "for ('a'..'z') { $h{$_ x 2}=1; print scalar %h } 1/8 2/8 3/8 4/8 5/8 6/8 7/8 8/16 9/16 10/16 11/16 12/16 13/16 14/16 15/16 <- before adding 'pp' 15/16 <- after adding 'pp' 15/16 15/16 15/16 15/16 21/32 21/32 21/32 21/32 21/32 21/32
Note the duplicate '15/16's. 'pp' was added to an existing bucket because 'pp' hashed to the same value as another key.

Replies are listed 'Best First'.
Re^2: Effect of scalar function on hash
by ysth (Canon) on Mar 23, 2006 at 11:03 UTC
    To make it change, force perl to make more buckets by adding more items to the hash.
    Or tell perl that you are going to be adding more items to the hash.
    perl -wle'%h=%ENV; print ~~%h; keys %h = 1000; print ~~%h'