#!/usr/bin/perl -w sub unwrap { my ($filepath) = @_; my $result = {}; open(X, $filepath) || die "$!"; local $/ = "\n>"; while () { chomp; s/^>//; my @lines = split("\n"); my $sequence_id = shift(@lines); my $sequence = join('', @lines); $result->{$sequence_id} = $sequence; } $result; } sub threeframes { my ($inhash) = @_; my $result = {}; for (keys %{$inhash}) { my $seq = $inhash->{$_}; $result->{$_}->{'sequence'} = $seq; # Do frame 1 my @frames = $seq =~ /(...)/g; $result->{$_}->{'frame1'} = join(' ', @frames); # Do frame 2 $seq = substr($seq, 1); # Note: # Someone in class suggetsed # $seq =~ s/^.//; # as an alternative to the use of substr. # I find the s/^.// technique easier to understand. @frames = $seq =~ /(...)/g; $result->{$_}->{'frame2'} = join(' ', @frames); $seq = substr($seq, 1); @frames = $seq =~ /(...)/g; $result->{$_}->{'frame3'} = join(' ', @frames); } $result; } $x = threeframes(unwrap('/net/share/perl_refs/cosmids1.txt')); print $x->{'ZK1307.9'}->{'frame1'}, "\n"; print $x->{'ZK1248.6'}->{'frame1'}, "\n"; print $x->{'ZK1248.6'}->{'frame3'}, "\n";