Hi folks,
The code shown bellow is supposed to de-reference a hash-reference of
array-references and print everything out nicely. But the array
references do not get de-referenced. I really appreciate the help.
Thanks,
Hans
#!usr/bin/perl -w
use strict;
use warnings;
use diagnostics;
my $alignment_hash;
$alignment_hash = &read_alignment ("Aligned_friz.txt", "%");
foreach my $key (keys (%$alignment_hash)) {
print "{$key}\t=>\t[$$alignment_hash{$key}]\n";
}
sub read_alignment {
my (
$align_file, # The path to the aligned sequence file
$esc # The escape character indicating
anotation lines in the alignement file
) = @_;
my ($seq, $seq_key, $amino_acids, %alignments);
open (ALIGNMENT, "<$align_file") or die "Could not open
\"$align_file\". $!\n";
while (<ALIGNMENT>) {
chomp;
next unless ($_ =~ /\S/);
# Skip any lines with only white space
if ($_ =~ /$esc/o) {
# "%" indicates an anotation line
if (not $seq) { # No
seq yet, must be the first pass ...
$seq_key = $_; # so
just get the anottation and goto next
next;
} else {
#turn
the seq into a list of amino acids
$amino_acids = [split (//, $seq)];
#
Place the anotation and the seq in a hash
$alignments{$seq_key} = $amino_acids;
$seq = "";
# Reset the $seq variable for the next seq
$seq_key = $_; #
Store the new key
}
} else {
# Not anotation:
next unless $seq_key; #
Skip any junk at the beginning of the file
$seq .= $_; # Get
more of the seq.
}
} #
Done reding file
close (ALIGNMENT);
$amino_acids = [split (//, $seq)];
$alignments{$seq_key} = $amino_acids;
# Place the anotation with last seq in hash
return (\%alignments);
}
--
________________________________________________
Hans E. E. Holtan
Graduate Student
UC Berkeley-Department of Plant and Microbial Biology
Plant Gene Expression Center
800 Buchanan Street
Albany, California 94710
U. S. A.
Phone: (510) 559-5922
FAX: (510) 559-6089
[EMAIL PROTECTED]
_________________________________________________
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]