大量のテストデータをつくるツール

csv形式の大量のテストデータをつくりたいときなどに使うツールのテンプレートです。
printfで対象項目の数値をインクリメントします。

#!/usr/bin/perl

use strict;
use warnings;
use Fatal qw/ open close unlink /;

{ package FileMaker;

  my $fh;   # filehandle

  sub new {
    my $self = shift;
    my $name = shift;
    bless { name      => $name,
            increment => 1,
          }, $self;
  }

  sub set_start     { $_[0]->{start}     = $_[1]; $_[0]; }
  sub set_end       { $_[0]->{end}       = $_[1]; $_[0]; }
  sub set_str       { $_[0]->{str}       = $_[1]; $_[0]; }
  sub set_increment { $_[0]->{increment} = $_[1]; $_[0]; }

  sub make {
    my $self  = shift;
    my $file  = $self->{name};
    my $start = $self->{start};
    my $end   = $self->{end};
    my $str   = $self->{str};
    my $incre = $self->{increment};

    open $fh, ">> $file";
    for (my $i=$start; $i<=$end; $i+=$incre) {
      my @input = ();
      for (my $j=0; $j<($str =~ s/%/%/g); $j++) {
        push @input, $i;
      }
      printf $fh $str, @input;
    }
    close $fh;
    $self;
  }

  sub initialize {
    my $self = shift;
    my $file = $self->{name};
    unlink $file;
    $self;
  }
}


my $file   = FileMaker->new("filename.csv");
my $str_1  = 'tokyo%05d,090%05d,20071015'."\n";
my $str_2  = 'osaka%05d,090%05d,20071015'."\n";

$file->initialize
     ->set_str($str_1)
     ->set_start(1)
     ->set_end(3)
     ->make
     ->set_str($str_2)
     ->set_increment(2)
     ->set_start(4)
     ->set_end(10)
     ->make;

exit 0;