--- /dev/null
+package Pairwise;
+
+use strict;
+use warnings;
+use Carp;
+use File::Temp;
+use base qw(Root Common);
+
+use Run qw(check);
+
+sub path {
+ my ( $self, $path ) = @_;
+ if ( defined $path ) {
+ $self->{path} = $path;
+ } else {
+ if ( defined $self->{path} ) {
+ return $self->{path};
+ } else {
+ croak "Pairwise::run: path to pairwise not defined";
+ }
+ }
+}
+
+sub run {
+ my ( $self, $fasta ) = @_;
+
+ local $/ = undef;
+ local $? = 0;
+
+ my $f1 = File::Temp->new->filename;
+ my $f2 = File::Temp->new->filename;
+ $fasta->write_file($f1);
+ my $pairwise = $self->path;
+ system("$pairwise $f1 > $f2");
+ check( $pairwise, $? ) or croak "Pairwise::run: $pairwise was naughty\n";
+ open( my $fh, "<", $f2 );
+ my @output = join "\n", split "\n", <$fh>;
+ close $fh;
+ unlink $f1;
+ unlink $f2;
+
+ return @output;
+}
+
+sub old_run {
+ my ( $self, $fasta ) = @_;
+
+ local ( $/, $? ) = ( undef, 0 );
+
+ my $f = File::Temp->new->filename;
+ $fasta->write_file($f);
+
+ my $pid = open my $fh, $self->path . " $f |" or die $!;
+
+ my @output = join "\n", split "\n", <$fh>;
+
+ waitpid $pid, 0;
+ check( $self->path, $? ) or die "Pairwise was naughty\n";
+
+ return @output;
+}
+
+1;