Есть такой модуль — Data::Maker, с помощью которого возможно готовить наборы тестовых (или, если угодно, фейковых) данных в разных форматах.
Простейший пример по мотивам примера из документации все объясняет:
use v5.10;
use strict;
use Data::Maker;
my $maker = Data::Maker->new(
record_count => 5,
fields => [
{
name => 'phone',
format => '+7 \d\d\d \d\d\d-\d\d-\d\d',
},
]
);
while (my $item = $maker->next_record) {
say $item->phone->value;
}
Эта программа печатает пять телефонных номеров в формате, указанном при создании объекта Data::Maker:
+7 536 209-69-11
+7 119 599-52-63
+7 778 591-94-25
+7 723 863-71-04
+7 894 976-58-35
Теперь более сложный пример. В каждом случайном объекте помимо телефона будут формироваться имя, фамилия, а заодно и дата рождения.
Если номер телефона генерировался по заданной маске, напоминающей регулярное выражение, то логика для остальных полей реализована внутри соответствующих классов, например, Data::Maker::Field::DateTime. Ему, кстати, возможно передать параметры (какие именно, видно в исходнике).
use v5.10;
use strict;
use Data::Maker;
use Data::Maker::Field::Person::FirstName;
use Data::Maker::Field::Person::LastName;
use Data::Maker::Field::DateTime;
my $maker = Data::Maker->new(
record_count => 10,
fields => [
{
name => 'phone',
format => '+7 \d\d\d \d\d\d-\d\d-\d\d',
},
{
name => 'firstname',
class => 'Data::Maker::Field::Person::FirstName',
},
{
name => 'lastname',
class => 'Data::Maker::Field::Person::LastName',
},
{
name => 'birthday',
class => 'Data::Maker::Field::DateTime',
args => {
start => 1980,
end => 1990,
},
},
]
);
while (my $item = $maker->next_record) {
say $item->firstname->value, ' ',
$item->lastname->value, "\t",
$item->phone->value, "\t",
$item->birthday->value;
}
Результат работы:
Sherrie Webster +7 001 585-82-85 1985-12-07T07:56:59
Opal Merrill +7 235 817-78-63 1985-07-28T05:10:55
Erik Miles +7 252 016-71-82 1988-05-30T08:47:48
Darlene Peters +7 038 976-13-95 1981-12-10T02:53:20
Michael Salinas +7 039 850-43-23 1982-09-22T09:44:26
Sallie Roth +7 404 102-02-88 1989-04-06T23:47:54
Renee Lowe +7 975 958-07-91 1981-04-10T23:00:27
Deanna Rocha +7 442 730-46-48 1987-05-26T15:11:47
Rena Benson +7 535 737-78-68 1987-12-01T17:11:34
Ella Obrien +7 064 783-65-38 1986-03-20T11:36:36
Автор честно признается, что скорость работы генератора довольно низкая. Тем не менее, это интересный модуль, который может быть полезен для тестов.
P. S. Moose настолько проникает в разработчика, что даже краткое описание модуля Data::Maker::Field содержит технические детали: a Moose role that is consumed by all Data::Maker field classes; the ones included with Data::Maker and the ones that you write yourself to extend Data::Maker's capabilities.
Комментировать