NAME¶
Data::Faker - Perl extension for generating fake data
SYNOPSIS¶
use Data::Faker;
my $faker = Data::Faker->new();
print "Name: ".$faker->name."\n";
print "Company: ".$faker->company."\n";
print "Address: ".$faker->street_address."\n";
print " ".$faker->city.", ".$faker->us_state_abbr." ".$faker->us_zip_code."\n";
DESCRIPTION¶
This module creates fake (but reasonable) data that can be used for things such
as filling databases with fake information during development of database
related applications.
OBJECT METHODS¶
- new()
- Object constructor. As a shortcut, you can pass names of plugin modules to
load to new(), although this does not actually restrict the
functions available to the object, it just causes those plugins to be
loaded if they haven't been loaded already. All Data::Faker objects in one
interpreter share the plugin data, so that multiple objects don't multiply
the memory requirements.
- methods();
- Return a list of the methods that have been provided by all of the loaded
plugins.
- register_plugin();
- Plugin modules call register_plugin() to provide data methods. See
any of the included plugin modules for examples.
LOADING PLUGINS¶
You can specify which plugins to load by including just the base part of their
name as an argument when loading the module with 'use'. For example if you
only wanted to use data from the Data::Faker::Name module, you would load
Data::Faker like this:
use Data::Faker qw(Name);
By default any modules matching Data::Faker::* in any directory in @INC will be
loaded. You can also pass plugin names when calling the
new() method,
and they will be loaded if not already in memory. See
new().
WRITING PLUGINS¶
Writing a plugin to provide new kinds of data is easy, all you have to do is
create a module named Data::Faker::SomeModuleName that inherits from
Data::Faker.
To provide data, the plugin merely needs to call the register_plugin function
with one or more pairs of function name and function data, like this:
#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Faker;
my $faker = Data::Faker->new();
print "My fake data is ".$faker->some_data_function."\n";
package Data::Faker::SomeData;
use base 'Data::Faker';
__PACKAGE__->register_plugin(
some_data_function => [qw(foo bar baz gazonk)],
another_data_item => sub { return '$some_data_function' },
);
The first argument is the method that will be made available to your object, the
second is a data source. If the data source is not a reference, it will simply
be returned as the data, if it is a reference to an array, a random element
from the array will be returned, and if it is a subroutine reference, the
subroutine will be run and the results will be returned. The data that your
data source provides is checked for two things, tokens (that look like perl
variables, starting with a $), and numeric indicators (#). Any tokens found
will be replaced with their values, and any numeric indicators will be
replaced with random numbers. You can include a literal $ or # by prefacing it
with a backslash. If you load more than one module that defines the same
function, it has an additive effect, when the function is called one of the
data sources provided will be selected at random and then it will be called to
get a piece of data.
Some data source examples:
__PACKAGE__->register_plugin(
age => ['#','##'],
monetary_amount => ['\$####.##','\$###.##', '\$##.##', '\$#.##'],
adult_age => sub { int(rand(70)+18) },
);
If your data source is a code reference, it will receive the calling object as
an argument so you can build data out of other data if you need to. See
Data::Faker::DateTime for some examples of this.
BUGS AND KNOWN ISSUES¶
There is no way to selectively remove data sources from a plugin that was
loaded, even if you didn't load it.
SEE ALSO¶
Text::Lorem
AUTHOR¶
Jason Kohles, <email@jasonkohles.com>
COPYRIGHT AND LICENSE¶
Copyright 2004-2005 by Jason Kohles
This library is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.