Perl Roff Emacs Lisp Perl 6 Common Lisp Gnuplot
Switch branches/tags
tag-ensembl-stable-061 start snapshot-at-head-of-07-branch release-ensembl-06 release-06 release-06-2 release-1_01 release-1-7-2 release-1-7-1 release-1-7-0 release-1-7-0-RC6 release-1-7-0-RC5 release-1-7-0-RC4 release-1-6-zenodo release-1-6-924 release-1-6-923 release-1-6-922 release-1-6-921 release-1-6-920 release-1-6-910 release-0-9-3 release-0-9-2 release-0-9-0 release-0-7-2 release-0-7-1 release-0-7-0 release-0-05 release-0-05-1 release-0-04-4 release-0-04-3 release-0-04-2 release-0-04-1 prerelease-06 ontology-overhaul-start ontology-overhaul-end ontology-fix1 lightweight_feature join-0-04-to-0-05 gbrowse_1_65 for_gmod_0_003 bioperl-run-release-1-2-0 bioperl-release-1-6 bioperl-release-1-6-901 bioperl-release-1-6-9 bioperl-release-1-6-1 bioperl-release-1-5-2 bioperl-release-1-5-2-patch2 bioperl-release-1-5-2-patch1 bioperl-release-1-5-1 bioperl-release-1-5-1-rc4 bioperl-release-1-5-0 bioperl-release-1-5-0-rc2 bioperl-release-1-5-0-rc1 bioperl-release-1-4-0 bioperl-release-1-2-3 bioperl-release-1-2-2 bioperl-release-1-2-1 bioperl-release-1-2-0 bioperl-release-1-1-0 bioperl-release-1-0-2 bioperl-release-1-0-1 bioperl-release-1-0-0 bioperl-devel-1-3-04 bioperl-devel-1-3-03 bioperl-devel-1-3-02 bioperl-devel-1-3-01 bioperl-devel-1-1-1 bioperl-061-pre1 bioperl-06-1 bioperl-1-6-RC4 bioperl-1-6-RC3_15392 bioperl-1-6-RC3 bioperl-1-6-RC2_15306 bioperl-1-6-RC2 bioperl-1-6-RC1 bioperl-1-6-0_006 bioperl-1-6-0_005 bioperl-1-6-0_004 bioperl-1-6-0_003 bioperl-1-6-0_002 bioperl-1-6-0_001 bioperl-1-2-1-rc1 bioperl-1-0-alpha2-rc bioperl-1-0-alpha bioperl-1-0-0 before-05-to-06-trunk before-05-to-06-merge after004 after-05-06-merge after-05-06-merge-2
Nothing to show
Clone or download
cjfields Merge pull request #271 from thibauthourlier/patch-2
Fixed call to self instead of $self
Latest commit 51dc747 May 13, 2018
Failed to load latest commit information.
Bio Fixed call to self instead of $self May 2, 2018
deobfuscator Change stray 'wiki/HOW' URLs to new site Jul 30, 2017
examples examples/align/ remove file, now part of Bio-Tools-Run-Al… Sep 13, 2017
ide Standardized URL to "" Apr 22, 2014
maintenance get authors script kinda working Sep 8, 2016
models Add mention that these are version 1.0 diagrams Feb 13, 2004
scripts Removal of and related modules, tests, and… Sep 8, 2017
t Get rid of '"my" variable $seq masks earlier declaration in same scope' Jan 28, 2018
travis_scripts Fixes test for running code coverage (#245) Aug 13, 2017
.gitignore [skip ci] add zip and bz2 Nov 6, 2016
.travis.yml test out 5.26 Jun 24, 2017
AUTHORS Updated Changes and included myself in AUTHORS after Chris suggestion Nov 17, 2014
BUGS Standardized URL to "" Apr 22, 2014 git Bugs link Jun 11, 2016
Build.PL add MANIFEST file on the fly Jul 7, 2016
Changes update Changes Sep 11, 2017
DEPENDENCIES Make new DEPENDENCIES file Nov 10, 2016
DEPRECATED add documentation on code move Jun 30, 2010 markdownize file, minimal changes (looks fairly up to date) Jul 7, 2016
INSTALL.SKIP skip ConfigData (for now) Feb 10, 2009 Change version, we're on 1.7 now Dec 3, 2016
LICENSE added GPL License Sep 5, 2007
MANIFEST.SKIP no_index means 'do not index any modules nor add them to provides in … Oct 26, 2014 URLify Apr 10, 2016

Build Status Coverage Status DOI Documentation Status

Getting Started

Please see the the INSTALL or INSTALL.WIN documents for installation instructions.

About BioPerl

BioPerl is a package of public domain Perl tools for computational molecular biology.

Our website ( provides an online resource of modules, scripts, and web links for developers of Perl-based software for life science research.

Contact Information

Please submit bugs, in particular about documentation which you think is unclear, or about problems in installation. We are also very interested in functions which don't work the way you think they do!

The Directory Structure

The BioPerl directory structure is organized as follows:

  • Bio/ - BioPerl modules

  • deobfuscator/ - Code for tracing OOP relationships

  • examples/ - Scripts demonstrating the many uses of BioPerl

  • ide/ - Files for developing BioPerl using an IDE

  • maintenance/ - BioPerl housekeeping scripts

  • models/ - DIA drawing program generated OO UML for BioPerl classes (these are quite out-of-date)

  • scripts/ - Useful production-quality scripts with POD documentation

  • t/ - Perl built-in tests, tests are divided into subdirectories based on the specific classes being tested

  • t/data/ - Data files used for the tests, provides good example data

  • travis_scripts/ - script to customize Travis


For documentation on BioPerl see the HOWTO documents online at

Useful documentation in the form of example code can also be found in the examples/ and scripts/ directories. The current collection includes scripts that run BLAST, index flat files, parse PDB structure files, make primers, retrieve ESTs based on tissue, align protein to nucleotide sequence, run GENSCAN on multiple sequences, and much more! See bioscripts.pod for a complete listing.

Individual *.pm modules have their own embedded POD documentation as well. A complete set of hyperlinked POD, or module, documentation is available at

Remember that 'perldoc' is your friend. You can use it to read any file containing POD formatted documentation without needing any type of translator (e.g. 'perldoc Bio::SeqIO').

If you used the Build.PL installation, and depending on your platform, you may have documentation installed as man pages, which can be accessed in the usual way.


BioPerl releases are always available from the website at or in CPAN. The latest code can be found at

  • BioPerl currently uses a sematic numbering scheme to indicate stable release series vs. development release series. A release number is a three digit number like 1.2.0.
    • The first digit indicates the major release, the idea being that all the API calls in a major release are reasonably consistent.
    • The second number is the release series. This is probably the most important number, and represents added functionality that is backwards-compatible.
    • The third number is the point or patch release and represents mainly bug fixes or additional code that doesn't add significant functionality to the code base.

From the 1.0 release until the 1.6 release even numbers (e.g. 1.4) indicated stable releases. Stable releases were well tested and recommended for most uses. Odd numbers (e.g. 1.3) were development releases which one would only use if one were interested in the latest features. The final number (e.g. in 1.2.1) is the point or patch release. The higher the number the more bug fixes has been incorporated. In theory you can upgrade from one point or patch release to the next with no changes to your own code (for production cases, obviously check things out carefully before you switch over).

The upcoming 1.7 release will be the last release series to utilize the alternating 'stable'/'developer' convention. Starting immediately after the final 1.6 branch, we will start splitting BioPerl into several smaller easier-to-manage distributions. These will have independent versions, all likely starting with v1.7.0. We do not anticipate major API changes in the 1.7.x release series, merely that the code will be restructured in a way to make maintenance more feasible. We anticipate retaining semantic versioning until the 2.x release.

Caveats and Warnings

When you run the tests with ./Build test some tests may issue warnings messages or even fail. Sometimes this is because we didn't have anyone to test the test system on the combination of your operating system, version of perl, and associated libraries and other modules. Because BioPerl depends on several outside libraries we may not be able to test every single combination so if there are warnings you may find that the package is still perfectly useful.

If you install the bioperl-run system and run tests when you don't have the program installed you'll get messages like program XXX not found, skipping tests. That's okay, BioPerl is doing what it is supposed to do. If you wanted to run the program you'd need to install it first.

Not all scripts in the examples/ directory are correct and up-to-date. If you find an issue with a script please submit a bug report to and consider helping out in their maintenance.

If you are confused about what modules are appropriate when you try and solve a particular issue in bioinformatics we urge you to look at HOWTO documents first.

A simple module summary

Here is a quick summary of many of the useful modules and how the toolkit is laid out:

All modules are in the Bio/ namespace,

  • Perl is for new users, and gives a functional interface to the main parts of the package.

  • Seq is for Sequences (protein and DNA).

    • Bio::PrimarySeq is a plain sequence (sequence data + identifiers)
    • Bio::Seq is a fancier PrimarySeq, in that it has annotation (via Bio::Annotation::Collection) and sequence features (via Bio::SeqFeatureI objects, attached via Bio::FeatureHolderI).
    • Bio::Seq::RichSeq is all of the above, plus it has slots for extra information specific to GenBank/EMBL/SwissProt files.
    • Bio::Seq::LargeSeq is for sequences which are too big for fitting into memory.
  • SeqIO is for reading and writing Sequences. It is a front end module for separate driver modules supporting the different sequence formats

  • SeqFeature represent start/stop/strand-based localized annotations (features) of sequences

    • Bio::SeqFeature::Generic is basic catchall
    • Bio::SeqFeature::Similarity a similarity sequence feature
    • Bio::SeqFeature::FeaturePair a sequence feature which is pairwise such as query/hit pairs
  • SearchIO is for reading and writing pairwise alignment reports, like BLAST or FASTA

  • Search is where the alignment objects for SearchIO are defined

    • Bio::Search::Result::GenericResult is the result object (a blast query is a Result object)
    • Bio::Search::Hit::GenericHit is the Hit object (a query will have 0 to many hits in a database)
    • Bio::Search::HSP::GenericHSP is the High-scoring Segment Pair object defining the alignment(s) of the query and hit.
  • SimpleAlign is for multiple sequence alignments

  • AlignIO is for reading and writing multiple sequence alignment formats

  • Assembly provides the start of an infrastructure for assemblies and Assembly::IO IO converters for them

  • DB is the namespace for all the database query classes

    • Bio::DB::GenBank/GenPept are two modules which query NCBI entrez for sequences
    • Bio::DB::SwissProt/EMBL query various EMBL and SwissProt repositories for a sequences
    • Bio::DB::GFF is Lincoln Stein's fast, lightweight feature and sequence database which is the backend to his GBrowse system (see
    • Bio::DB::Flat is a fast implementation of the OBDA flat-file indexing system (cross-language and cross-platform supported by O|B|F projects see
    • Bio::DB::BioFetch/DBFetch for OBDA, Web (HTTP) access to remote databases.
    • Bio::DB::InMemoryCache/FileCache (fast local caching of sequences from remote dbs to speed up your access).
    • Bio::DB::Registry interface to the OBDA specification for remote data sources
    • Bio::DB::Biblio for access to remote bibliographic databases.
    • Bio::DB::EUtilities is the initial set of modules used for generic queried using NCBI's eUtils.
  • Annotation collection of annotation objects (comments, DBlinks, References, and misc key/value pairs)

  • Coordinate is a system for mapping between different coordinate systems such as DNA to protein or between assemblies

  • Index is for locally indexed flatfiles with BerkeleyDB

  • Tools contains many miscellaneous parsers and functions for different bioinformatics needs

    • Gene prediction parser (Genscan, MZEF, Grail, Genemark)
    • Annotation format (GFF)
    • Enumerate codon tables and valid sequences symbols (CodonTable, IUPAC)
    • Phylogenetic program parsing (PAML, Molphy, Phylip)
  • Map represents genetic and physical map representations

  • Structure - parse and represent protein structure data

  • TreeIO is for reading and writing Tree formats

  • Tree is the namespace for all associated Tree classes

    • Bio::Tree::Tree is the basic tree object
    • Bio::Tree::Node are the nodes which make up the tree
    • Bio::Tree::Statistics is for computing statistics for a tree
    • Bio::Tree::TreeFunctionsI is where specific tree functions are implemented (like is_monophyletic and lca)
  • Bio::Biblio is where bibliographic data and database access objects are kept

  • Variation represent sequences with mutations and variations applied so one can compare and represent wild-type and mutation versions of a sequence.

  • Root, basic objects for the internals of BioPerl

Upgrading from an older version

If you have a previously installed version of BioPerl on your system some of these notes may help you.

  • Some modules have been removed because they have been superceded by new development efforts. They are documented in the DEPRECATED file that is included in the release.

  • Some methods, or the Application Programming Interface (API), have changed or been removed. You may find that scripts which worked with BioPerl 1.4 may give you warnings or may not work at all (although we have tried very hard to minimize this!). Send an email to the list and we'll be happy to give you pointers.