dimitris852 has asked for the wisdom of the Perl Monks concerning the following question:

#1 #!/usr/bin/perl $ENV{CLUSTALDIR} = 'C:\\\\\\\\\\\\\\\\\\\\\; use Bio::Tools::Run::Alignment::Clustalw; my $file = <>; # Get file name (fasta file) from command prompt. # Build a clustalw alignment factory my $factory = Bio::Tools::Run::Alignment::Clustalw->new(-matrix => 'BL +OSUM'); my $ktuple = 2; $factory->ktuple($ktuple); my $inseq = Bio::SeqIO->new( '-file' => "<$file", '-format' => 'fasta' ); my $seq; my @seq_array; while ($seq = $inseq->next_seq) { push(@seq_array, $seq); } # Now we do the actual alignment. my $seq_array_ref = \@seq_array; my $aln = $factory->align($seq_array_ref);

##### ########## ########### ################

#2 my $alnio = Bio::AlignIO->new('-file'=> 'out_file','-format' => 'clust +alw'); my $dfactory = Bio::Tree::DistanceFactory->new('-method' => 'NJ'); my $stats = Bio::Align::ProteinStatistics->new; my $treeout = Bio::TreeIO->new('-format' => 'newick'); while( my $aln = $alnio->next_aln ) { my $mat = $stats->distance('-method' => 'Kimura', '-align' => $aln); my $tree = $dfactory->make_tree($mat); $treeout->write_tree($tree); }

I want the result of the aligning to pass in the second script(NOT through a file format) and create a Tree.I want to have only one output file in the end in newick form with my Tree. (I m still working on this last one).Thanks!

Replies are listed 'Best First'.
Re: how to combine these two scripts in perl?
by GotToBTru (Prior) on Mar 15, 2016 at 12:47 UTC

    I see one script and not two, so your question is confusing. I think you mean you want to pass a variable between scripts without storing it in a file.

    First of all, I am not sure why storing it in a file concerns you. There are several modules available to you, including Data::Dumper and Storable. Data::Dumper is core so you already have it, nothing needs to be installed.

    Not using a file involves the two scripts sharing memory. Also possible, I believe, but more complicated.

    But God demonstrates His own love toward us, in that while we were yet sinners, Christ died for us. Romans 5:8 (NASB)

      i could use the following factory instead of that in the 1st script,but that would give me a file(out_file)

      my $factory = Bio::Tools::Run::Alignment::Clustalw->new(-matrix => 'BLOSUM','outfile' => 'out_file','outype'=clustalw);

      This file matches to first line my $alnio = Bio::AlignIO->new('-file'=> 'out_file','-format' => 'clustalw');

      of the 2nd script,and when combining the two scripts, the whole (1+2) script works fine. But

      yeap, i want to pass a variable and have only one file produced at the end of final whole (1+2)script with my final Tree.

        If you have unwanted files left over, the solution to that is easy.

        # script 1 use strict; use warnings; use Storable; my $storable_file = 'store.file'; $var = complicated multilevel structure; store(\$var,$storable_file); # script 2 use strict; use warnings; use Storable; my $storable_file = 'store.file'; my $var = retrieve($storable_file); unlink $storable_file; open my $outfile,'>','output.file'; print $outfile $var; close $outfile;

        Only file created will be output.file.

        But God demonstrates His own love toward us, in that while we were yet sinners, Christ died for us. Romans 5:8 (NASB)