JPRED-2 Move Jpred 3.0.1 to public Git
[jpred.git] / jpred / lib / Index / EMBOSS.pm
1 package Index::EMBOSS;
2
3 use strict;
4 use warnings;
5 use Carp;
6
7 use POSIX qw(WIFEXITED WEXITSTATUS WIFSIGNALED WTERMSIG);
8 use IPC::Open3;
9
10 use base qw(Root);
11
12 use FASTA::File;
13
14 sub read_index { 1 }
15
16 sub get_sequence {
17         my ($self, $key) = @_;
18         croak "No value for get_sequence" unless $key;
19
20         my @cmd = split / /, "seqret -filter $key";
21
22         my $pid = open3(undef, \*RD, \*ERR, @cmd);
23
24         my $seqs = FASTA::File->new(read => \*RD);
25         my @err = <ERR>;
26
27         pop @err;
28         pop @err;
29
30         close RD; close ERR;
31         waitpid $pid, 0;
32         
33         # Everything was okay...
34         if (WIFEXITED($?) and not WEXITSTATUS($?)) { return $seqs }
35         # Non-zero exit
36         elsif (WIFEXITED($?) and WEXITSTATUS($?)) {
37                 carp "seqret had a problem: $?; $!";
38                 carp @err;
39         }
40         # Was it stopped by an external program
41         elsif (WIFSIGNALED($?)) {
42                 carp "seqret halted by external signal ".WTERMSIG($?)
43         }
44         else {
45                 carp "seqret suffered from a random pantwetting event"
46         }
47
48         return undef;
49 }
50
51 1;