Introduction to PDL

PDL (Perl Data Language) gives standard Perl the ability to compactly store and quickly manipulate the large N-dimensional data arrays common to scientific computing. PDL turns Perl into an array-oriented, numerical language similar to such commercial packages as IDL and MatLab. One can write simple Perl expressions to manipulate entire numerical arrays all at once.

PDL provides extensive numerical and semi-numerical functionality with support for two- and three-dimensional visualisation as well as a variety of I/O formats. The goal is to allow PDL to interact with a variety of external numerical packages, graphics and visualisation systems. Easy interfacing to such systems is one of the core design features of PDL.

Package Information

PDL Dependencies

PDL is a collection of over 90 Perl modules. Some of these modules require additional libraries, packages and/or Perl modules for full functionality. Listed below are the modules which require additional software or configuration. If you don't need a particular module's functionality, you don't need to install its dependencies. The dependency tree for each module is listed downward, meaning you'll need to start at the bottom of a module's tree and work up. The dependencies are listed in the same order as they are in the DEPENDENCIES file, found in the package source tree.

This package (and many of the dependency packages) requires a Fortran compiler for full functionality of all the different modules. The gfortran compiler installed with the current BLFS version of GCC (4.1.2) will not work. If you want to compile the parts of this package that require a Fortran compiler, you'll need to install a GCC-3.x.x version of Fortran. The GCC developers recommend using Fortran from GCC-3.4.6. You can find specific instructions to install a GCC-3.4.6 compiler on the BLFS Wiki. Alternatively, if you have a need to install GCC-3.3.6, you can add the Fortran compiler to the list of compilers installed in those instructions. Don't forget to put the directory containing the {g,f}77 commands at the beginning of your PATH environment variable before beginning the compilation.


The PDL::NiceSlice module is used to enhance PDL's slice syntax. “Slicing” is a term used in the process of creating a cross-section, or slice, of a PDL object (piddle).


The Inline::Pdlpp module allows you to define fast PP code inline in your scripts.


perldl is a simple shell (written in Perl) which allows interactive use of PDL.


The PDL::Graphics::TriD module implements a generic 3D plotting interface for PDL. Points, lines and surfaces (among other objects) are supported.


The PDL::Graphics::PGPLOT module is a convenience interface to the PGPLOT commands, implemented using the object oriented PGPLOT plotting package in the PDL::Graphics::PGPLOT::Window module.


The PDL::Graphics::PLPLOT module is a simple interface to the PLplot plotting library.


The PDL::Graphics::IIS module provides an interface to any image display “device” which supports the “IIS protocol”.


The PDL::Graphics::Karma module is an interface to Karma visualisation applications.

Note: You may need to modify the WHERE_KARMA => undef line in the source tree perldl.conf file to point to your installation of Karma


The PDL::IO::Pic module implements I/O for a number of popular image formats by exploiting the xxxtopnm and pnmtoxxx converters from the Netpbm package and the cjpeg and djpeg converters. It also contains the routine wmpeg to write MPEG movies from piddles representing image stacks.


The PDL::Slatec module serves the dual purpose of providing an interface to parts of the slatec library and showing how to interface PDL to an external library. The module provides routines to manipulate matrices, calculate FFTs, fit data using polynomials, and interpolate/integrate data using piecewise cubic Hermite interpolation.


The PDL::GSL module is an interface to the functions provided by the Gnu Scientific Library.


The PDL::FFTW module is a means to interface PDL with the FFTW library. It's similar to the standard FFT routine but it's usually faster and has support for real transforms. It works well for the types of piddles for which the library was compiled (otherwise it must do conversions).


The PDL::IO::Browser module is a 2D cursor terminal data browser for piddles.

There is no additional software required to use the module. However, the default is to not install the module because some platforms don't provide a curses compatible library. To enable the module, issue the following command:

sed -i -e "s/WITH_IO_BROWSER => 0/WITH_IO_BROWSER => 1/" \


The PDL::IO::NDF module adds the ability to read and write Starlink N-dimensional data files as N-dimensional piddles.

User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/pdl

Installation of PDL

Install PDL (and all the dependency Perl modules) by running the following commands:

sed -i 's/\(dirname);\)/\1\nuse blib;/' Demos/BAD*demo.pm.PL &&
perl Makefile.PL &&
make &&
make test

Now, as the root user:

make install

Command Explanations

sed -i '...' Demos/BAD*demo.pm.PL: This is necessary to fix a build issue caused by changes in ExtUtils::MakeMaker-6.30 which was introduction in Perl-5.8.8.

Configuring PDL

Config Files

~/.perldlrc and local.perldlrc in the current directory

Configuration Information

See http://pdl.sourceforge.net/PDLdocs/perldl.html#the startup file ~/.perldlrc for information about configuring perldl to suit your needs.


Installed Programs: pdl, pdldoc, perldl, and pptemplate
Installed Modules: 90+ individual Perl modules
Installed Directories: /usr/lib/perl5/site_perl/5.8.8/i686-linux/{,auto/}PDL

Short Descriptions


is a binary program called from PDL scripts which is used to interface perldl.


is a shell interface to PDL documentation.


is a simple shell (written in Perl) for interactive use of PDL.


is a script to generate Makefile.PL and PP file skeletons.

Last updated on 2007-08-05 17:14:40 -0500