Phoenix.pm: Please help, my brain is fried
Mark Pease
Mark.Pease at motorola.com
Thu Jan 27 13:43:51 CST 2000
> Beaves at aol.com wrote:
> << sub create_login_id {
> return join('', map $_->[int(rand(52))],
> (['a'..'z','A'..'Z']) x int(rand(6)+6));
> } >>
>
> Could you expand this code and put in a few comments about what it is doing.
> I like the conciseness, but I'm not exactly following what each section is
> doing...
Let's split out the sections in the order that they are executed:
# Pick the number of characters to have in the login id. It must have
# at least 6 and no more than 12 elements.
$id_length = int(rand(6)+6);
# Build an array where each element is a reference to another array
# that contains all of the upper and lower case letters (52 elements in
each).
# (The 'x' operator, in array context, will build an array where each
# element is the same.)
@passwd = (['a'..'z','A'..'Z']) x $id_length);
# Now pick one letter from each array reference.
# (Map will execute a chunck of code on each element of an array,
# and return an array where each element contains the value returned
# from the chunck of code.)
@passwd = map $_->[int(rand(52)], @passwd;
# The array now contains the login id, one character per element.
# Join all of the character together into one string, and return.
return join '', @passwd;
> (the classic 'brevity versus understandability' dillemma)
No dillemma, understandablility should always win over brevity.
--
Mark Pease Mark.Pease at mototorola.com
Motorola DigitalDNA(tm) Laboratories perl at perl.sps.mot.com
2100 E. Elliot Rd. Phone:(602)413-8191 Mail Stop: AZ34 EL701
Tempe, AZ 85284 Pager:(800)381-3304 FAX:(602)413-8183
Co-Author (with Carl Dichter) of "Software Engineering with Perl"
More information about the Phoenix-pm
mailing list