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

# This example will pull out N base pairs upstream of each predicted
# gene in C. elegans

use lib '../blib/lib','../blib/arch';
use Ace::Sequence::Multi;
use strict vars;

use constant HOST => 'stein.cshl.org';
use constant MAPS  => 300000;
use constant GENES => 300001;

$|=1;

my $upstream = shift || die "Usage: upstream.pl <size (bp)>\n";

my $db1 = Ace->connect(-host=>HOST,-port=>MAPS)  || die "Connection failure: ",Ace->error;
my $db2 = Ace->connect(-host=>HOST,-port=>GENES) || die "Connection failure: ",Ace->error;

warn "Fetching all predicted genes, please wait....\n";
my @genes = $db2->fetch('Predicted_Gene' => '*');
for my $gene(@genes) {
  my $seq = Ace::Sequence->new(-seq=>$gene,-offset=>(- $upstream),-length=>$upstream);
  next unless my $s = Ace::Sequence->new(-db=>$db1,
					 -name   => $seq->parent,
					 -offset => $seq->offset,
					 -length => $seq->length);
  print $gene,"\t",$s->dna,"\n";
}