Modules and Projects
On of the key features of Perl is CPAN, the Comprehensive Perl Archive Network. CPAN is a huge collection of modules published by authors all over the world, there is a module availble to do almost any task! There are several front end search engines to CPAN, including the vernerable search.cpan.org and the newer metacpan.org.
There are of course other scientific Perl projects which are not hosted on CPAN. We hope to highlight these on this site, but we also want to encourage all module authors to consider publishing to CPAN, not only for the free testing, but to allow easy code reuse in the typical Perl way. If you would like help packaging your module for CPAN please let us know, we would love to help get you started.
So CPAN or not here are a list of useful modules and projects, perhaps a blurb about what they do and a link to relevant repositories and documentation. If you have more to add, let us know, or send a pull request.
Pure Mathematics
Numerical Modules/Libraries
- Perl Data Language - PDL turns Perl into a free, array-oriented, numerical language
- PerlGSL - new project to provide the Gnu Scientific Library to Perl with a Perlish feel
- Math::GSL - another wrapper of the GSL for Perl, this one made using SWIG
- Math::Cephes - Perl interface to the cephes library. Provides over 150 mathematical functions
- Math::Pari - Perl interface to the PARI library for numerical/scientific/number-theoretic calculations
Plotting
- PDL::Graphics::Prima - A new graphics engine for PDL based on the Prima toolkit
- PDL::Graphics::Gnuplot - An interface between PDL and Gnuplot
- WebService::Plotly - access the plot.ly API for online plotting
Statistics
- PDL::Stats - Many useful routines for doing statistical analysis using PDL. Note that the docs might render better on its project site
- Statistics::R - A bridge between Perl and the statistical language R
Units
- Physics::Unit - Manipulate physics units and dimensions
- MooseX::Types::NumUnit - (Ab)use Moose’s type coercions to handle inputs with units. Uses
Physics::Unit
internally.
Symbolic Mathematics
- Math::Symbolic - Perl implementation of symbolic mathematics
- Math::Mathematica - A bridge between Perl and the proprietary symbolic language Mathematica
Physics
Astrophysics
- Field Line Universal relaXer (FLUX) - is a fluxon model that follows magnetic field evolution in a conductive atmosphere, with exactly prescribed field topology.
Electron Microscopy
- Physics::UEMColumn - an implementation of the Analytic Gaussian (AG) electron pulse propagation model, presented by Michalik and Sipe and extended by Berger and Schroeder
Experiment Analysis
- Demeter - a comprehensive system for processing and analyzing X-ray Absorption Spectroscopy data.
High Energy
Optics
- Physics::RayTransfer - Object-oriented ray transfer analysis. Designed with special attention to laser cavity stability analysis. (If you are looking for graphic rendering, this probably isn’t what you are looking for.)
Biology
- biodiverse - a tool for the spatial analysis of biological and related diversity
- BioPerl - a community effort to produce Perl code which is useful in biology
Artificial Intelligence/Machine Learning
- PerlGP - “The Open Source Perl Genetic Programming System”
- Darwin Tunes - “evolutionary music engine”, uses both PDL and PerlGP to evolve music. Source: github, Articles: PNAS, New Scientist
- Clairlib - “The Clair library is a suite of open-source Perl modules intended to simplify a number of generic tasks in natural language processing (NLP), information retrieval (IR), and network analysis (NA).”
- Algorithm::LibLinear - A Perl binding for LIBLINEAR, a library for classification/regression using linear SVM and logistic regression
Parallel Computing
- MCE - Many-Core Engine for Perl. Provides parallel processing capabilities. Several examples are provided in this thread.
MPI
- Parallel::MPI - basic bindings to the MPI library
- Parallel::MPI::Simple - a simplified, more Perlish interface to MPI
- PDL::Parallel::MPI - extension to Parallel::MPI with helpful PDL-specific commands
GPU Computing
- OpenCL - bindings to the OpenCL library
- CUDA::Minimal - a minimal, Perlish interface to CUDA
Simple fork-based Parallelization
- perlfork - Perl’s built-in fork (and fork emulation on Windows)
- forks - drop-in replacement for Perl’s threads module that uses forks; only works on Unixish systems
- Parallel::ForkManager - simpler way to manage parallel tasks using forks
- Parallel::Loops - wrapper over Parallel::ForkManager that also provides a simple means for shared data; communicates data back to parent using Storable and shared file handles, so not designed for large exchanges of data
Simple Perl thread-based Parallelization
- perlthrtut - Perl’s built-in threads
- forks - drop-in replacement for Perl’s threads module that uses forks; only works on Unixish systems
- Thread:: - many thread-related modules on CPAN are in the Thread:: namespace
Hardware
Lab::Measurement - access measurement hardware for testing using lab hardware