That code is wrong in three ways, as far as I can tell.
The biggest problem is that you need to pass the sum of all of the weights to rand(). If the weights happen to all add up to 1, then rand() with no arguments is fine. (Update: The original code didn't have weights that added up to 1.)
You don't really need the outer while(1) loop. Instead, just return the last item even if subtracting its weight from $rand doesn't quite get you to 0.
Using each means you need to reset the iterator, preferably both before and after.
No, none of that is necessarily going to help you understand the code. I might take a stab at explaining at a later time, if nobody else does. :)
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.