Hi,
I've written the following script to substitute names
for codes into a phylogenetic tree (newick format-file
attached) using a global hash with codes as key and
names as values...it seems to be working up to the
second to last line where I make the substitution...I
am able to make the substitution but cannot seem to
save the surrounding text...I've tried $1 and $2 but
in this case no substitution at all happens...any
suggestions or is there an easier to do this?
#!/usr/bin/perl -w
use warnings;
use Bio::Seq;
use Bio::SeqIO;
#initialize id and fasta files
my $codefile = $ARGV[0];
my $treefile = $ARGV[1];
#open alignment list and create a global hash of tree
codes with species name as
#open gi id file and assign file handle
open(ID,$codefile)|| die "can't open id file: $!\n";
#initialize hash
my(@ID);
my %id_global;
my $id;
while (<ID>){
#split on spaces
my @ID = split(/\s+/);
#print "ID->".$ID[0]."<-\n"."Code->".$ID[1]."<-\n";
#get rid of carriage returns
chomp;
#define id as the code number
my $id = $ID[1];
#print "ID->".$id."<-\n";
#create a global hash with code number as key and
species name as value
$id_global{$id}= $ID[0];
#print $id."VALUE->".$id_global{$id}."<-\n";
}
#test that keys loaded to global hash with correct
value
#foreach my $key (keys %id_global){
#print
"KEY->".$key."<-->VALUE->".$id_global{$key}."<-\n";
#}
#open treefile and while through it, substituting
species name (value) when key(code) found in file.
open (TREE,$treefile)|| die "can't open tree file:
$\n";
#my @TREE;
my $line;
while (<TREE>){
foreach my $code (keys %id_global){
#print
"CODE->".$code."<-VALUE->".$id_global{$code}."\n";
#initialize line as $_
$line = $_;
#if ($line =~ m/(.*).$code.(.*)/) {print "MATCH"."
".$code."VALUE->".$id_global{$code}."<-\n";}
#else {print "NO MATCH"." ".$code."<-\n";}
$line =~
s/(.*).$code.(.*)/$1.$id_global{$code}.$2/;
print $line;
}
}
kathryn
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>