The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

# simulated affy chip
use strict;

# one affy series laid down every 100 bp
use constant SAMPLE_INTERVAL => 100;
use constant GENE_SIZE       => 5000;
use constant GENE_DENSITY    => 5;     # 1 gene every 5 GENE_SIZE intervals
use constant GENOME_SIZE     => 50000;

my $gene_interval = 1;
while ($gene_interval < GENOME_SIZE) {
  my $in_gene = rand(GENE_DENSITY) < 1;
  my $base_intensity = $in_gene ? 800 : 200 ;
  my $gene_size_variance = int(GENE_SIZE/2 - rand(GENE_SIZE/2));
  my $gene_size += $gene_size_variance;
  my $last_end;
  for (my $i = 0; $i < $gene_size; $i += 100) {
    my $score = int $base_intensity + (100-rand(200));
    my $start = $gene_interval + $i;
    my $end   = $start + 99;
    print join ("\t",qw(ctgA affy tlevel),$start,$end,$score,qw(. .),"Affy Expt1"),"\n";
    $last_end = $end;
  }
  # round to nearest 100
  $gene_interval = $last_end+1;
}