|
NAMEData::Rand - Random string and list utilityVERSIONThis document describes Data::Rand version 0.0.4SYNOPSISuse Data::Rand; my $rand_32_str = rand_data(); my $rand_64_str = rand_data(64); my @contestants = rand_data( 2, \@studio_audience, { 'do_not_repeat_index' => 1 } ); my $doubledigit = rand_data( 2, [0 .. 9] ); my @rolled_dice = rand_data( 2, [1 .. 6] ); my $pickanumber = rand_data( 1, [1 .. 1000] ); DESCRIPTIONSimple interface to easily get a string or array made of randomly chosen pieces of a set of data.How Random is "Random"?That depends much on you.Data::Rand works by building a string or array of the given length from a list of items that are "randomly" chosen, by default, using perl's built in rand(). You can affect rand()'s effectiveness by calling srand() or "seed_calc_with"() as you need. You can also override the use of rand() internally altogether with something as mathmatically random as you like. You can pass arguments as well which will affect how likley a not-so-random seeming pattern will emerge (for example: rand_data(1,['a']) will always return 'a', which is always predictable) The tests for this module call rand_data() without calling srand() explicitly, with no arguments (IE out of the box defaults) 100,000 times and fails if there are any duplicates. There's an optional test that does it 1,000,000 times but its not done by default simply for the sake of time and memory (for the test's lookup hash). From version zero-zero-four on new releases of this module must pass that test before being published. So if that's "random" enough for you, well, there you have it! If not, you can always make it more "truly" random as per the POD below. EXPORTrand_data() is exported by default. rand_data_string() and rand_data_array() are exportable.INTERFACErand_data()In scalar context returns a string made of a number of parts you want made up from an array of parts.In array context it returns a list the length of number of parts you want where each item is from the array of parts. Takes 0 to 3 arguments:
rand_data_string()Same args as rand_data(). The difference is that it always returns a string regardless of context.my $rand_str = rand_data_string( @rand_args ); # $rand_str contains the random string. my @stuff = rand_data_string( @rand_args ); # $stuff[0] contains the random string. rand_data_array()Same args as rand_data(). The difference is that it always returns an array regardless of context.my @rand_data = rand_data_array( @rand_args ); # @rand_data contains the random items my $rand_data = rand_data_array( @rand_args ); # $rand_data is an array ref to the list of random items seed_calc_with()This is a simple shortcut function you can use to call srand() for you with a pre-done calculation as outlined below. If this does not do what you like use srand() directly.It brings in Time::HiRes for you if needed and then calls srand() like so: srand($hires_time, $hires_micro_seconds, $$, 'YOUR ARGUEMENT HERE' || rand( 999_999_999_999_999)); You don't have to call it of course but here are some examples if you choose to: seed_calc_with(); # same as seed_calc_with( rand( 999_999_999_999_999 ) ); seed_calc_with( rand( 999_999_999_999_999 ) ); # same as seed_calc_with(); seed_calc_with( unpack '%L*', `ps axww | gzip` ); seed_calc_with( Math::TrulyRandom::truly_random_value() ); seed_calc_with( Crypt::Random::makerandom(...) ); Its not exportable on purpose to discourage blindly using it since calling srand() improperly can result in rand()'s result being less random. See srand and rand for more information. DIAGNOSTICSThrows no warnings or errors of its own.CONFIGURATION AND ENVIRONMENTData::Rand requires no configuration files or environment variables.DEPENDENCIES"seed_calc_with"() brings in Time::HiResINCOMPATIBILITIESNone reported.BUGS AND LIMITATIONSNo bugs have been reported.Please report any bugs or feature requests to "bug-data-rand@rt.cpan.org", or through the web interface at <http://rt.cpan.org>. TODORe-add tests I had worked up that went away with a failed HDMay add these behaviorial booleans to option hashref depending on feedback: 'return_on_bad_args' # do not use defaults, just return; 'carp_on_bad_args' # carp() about what args are bad and why 'croak_on_bad_args' # same as carp but fatal Gratefully apply helpful suggestions to make this module better AUTHORDaniel Muey "<http://drmuey.com/cpan_contact.pl>"LICENCE AND COPYRIGHTCopyright (c) 2007, Daniel Muey "<http://drmuey.com/cpan_contact.pl>". All rights reserved.This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic. DISCLAIMER OF WARRANTYBECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION.IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Visit the GSP FreeBSD Man Page Interface. |