PDL::IO(3pm)

πŸ’– NAME πŸ’–

PDL::IO β€” literally just an overview of some of the modules chillin' in the PDL::IO namespace. That's it, that's the name. (This is the PDL::IO(3pm) page from the User Contributed Perl Documentation, in case you were wondering where you wandered in from πŸ¦‹)


✨ SYNOPSIS ✨

so like, at your system shell, type:

perldoc PDL::IO

and from perldl, do:

pdl> ?? PDL::IO

boom. you're in. 🫢


🌸 DESCRIPTION 🌸

okay so PDL is packed with modules for displaying, loading, and saving data β€” like, an embarrassing amount of them. πŸ’… This list might even be incomplete, bestie, because people keep making new ones. Not us being lazy, the ecosystem is just growing. 🌱

The big categories, if you will:

  • Perlish or Text-Based β€” a few IO modules give you Perl-inspired capabilities. Those are PDL::IO::Dumper and PDL::IO::Storable. Then PDL::IO::Misc has simpler routines for dealing with delimited files, though its capabilities are limited to tabular or at most 3-d data sets. So like, cute but no multidimensional main character energy. πŸ˜…
  • Raw Format β€” PDL has two modules that store their data in a raw binary format: PDL::IO::FastRaw and PDL::IO::FlexRaw. They are fast but the files they produce will not be readable across different architectures. 🚩 These two modules are so similar that they could probably be combined. (the devs said that fr fr, not me.) You can also directly access the data from Perl using get_dataref in PDL::Core.
  • Image Handling β€” PDL has a handful of modules that will load images into ndarrays for you. They include PDL::IO::Dicom, PDL::IO::FITS, PDL::IO::GD, PDL::IO::Pic, and PDL::IO::Pnm. However, PDL::IO::FITS should also be considered something of a general data format. It's giving ✨multipurpose✨.
  • Disk Caching β€” both PDL::IO::FastRaw and PDL::IO::FlexRaw provide for direct ndarray-to-disk mapping, but they use PDL's underlying mmap functionality to do it, and that doesn't work for Windows. 😭 However, users of all operating systems can still use PDL::DiskCache, which can use any desired IO read/write functionality (though you may have to write a small wrapper function). tiny bit of effort, huge payoff, slay. πŸ’…
  • General Data Storage Formats β€” PDL has a number of modules that interface general data storage libraries. They include PDL::IO::HDF and PDL::IO::NDF (the latter is now a separate CPAN module). There is PDL::IO::IDL. PDL::IO::FITS is something of a general data format, since ndarray data can be stored to a FITS file without loss. PDL::IO::FlexRaw and PDL::IO::FastRaw read and write data identical to C's low-level write function and PDL::IO::FlexRaw can work with FORTRAN 77 UNFORMATTED files. FlexRaw and Storable provide general data storage capabilities. Finally, PDL can read Grib (weather-data) files using the CPAN module PDL::IO::Grib. That's a lot of acronyms, I know, breathe. 🌈
  • Making Movies β€” you can make an MPEG animation using PDL::IO::Pic's wmpeg function. cinema. 🎬

Here's a brief summary of all of the modules, in alphabetical order. buckle up, it's a long list and we are NOT skipping anybody. πŸ‘‘


🌟 PDL::DiskCache 🌟

The DiskCache module allows you to tie a Perl array to a collection of files on your disk, which will be loaded into and out of memory as ndarrays. Although the module defaults to working with FITS files, it allows you to specify your own reading and writing functions. This allows you to vastly streamline your code by hiding the unnecessary details of loading and saving files. lowkey iconic behavior. ✨

If you find yourself writing scripts to procss many data files, especially if that data processing is not necessarily in sequential order, you should consider using PDL::DiskCache. To read more, check the PDL::DiskCache documentation.

(yes, "procss" is spelled exactly like that in the original. we keep the typos, we respect the typos. πŸ’€)

🩻 PDL::IO::Dicom 🩻

DICOM is an image format, and this module allows you to read image files with the DICOM file format. To read more, check the PDL::IO::Dicom documentation.


🧚 PDL::IO::Dumper 🧚

Provides functionality similar to Data::Dumper for ndarrays. Data::Dumper stringifies a data structure, creating a string that can be evaled to reproduce the original data structure. It's also usually suitable for printing, to visualize the structure. ngl that's kind of a serve. πŸ’œ

To read more, check the PDL::IO::Dumper documentation. See also PDL::IO::Storable for a more comprehensive structured data solution.


⚑ PDL::IO::FastRaw ⚑

Very simple module for quickly writing, reading, and memory-mapping ndarrays to/from disk. It is fast to learn and fast to use, though you may be frustrated by its lack of options. πŸ™ˆ To quote from the original POD:

"The binary files are in general NOT interchangeable between different architectures since the binary file is simply dumped from the memory region of the ndarray. This is what makes the approach efficient."

This creates two files for every ndarray saved β€” one that stores the raw data and another that stores the header file, which indicates the dimensions of the data stored in the raw file. Even if you save 1000 different ndarrays with the exact same dimensions, you will still need to write out a header file for each one. You cannot store multiple ndarrays in one file. one ndarray, one file, no exceptions bestie. 😀

Note that at the time of writing, memory-mapping is not possible on Windows.

For more details, see PDL::IO::FastRaw. For a more flexible raw IO module, see PDL::IO::FlexRaw.


πŸ”­ PDL::IO::FITS πŸ”­

Allows basic reading and writing of FITS files. You can read more about FITS formatted files at <http://fits.gsfc.nasa.gov/fits_intro.html> and <http://en.wikipedia.org/wiki/FITS>. It is an image format commonly used in Astronomy. πŸ”­βœ¨

This module may or may not be installed on your machine. To get more information, check online at <http://pdl.perl.org/?docs=IO/FITS&title=PDL::IO::FITS>. To see if the module is installed, look for PDL::IO::FITS on your machine by typing at the system prompt:

perldoc PDL::IO::FITS

πŸŒ€ PDL::IO::FlexRaw πŸŒ€

Somewhat smarter module (compared to FastRaw) for reading, writing, and memory mapping ndarrays to disk. In addition to everything that FastRaw can do, FlexRaw can also store multiple ndarrays in a single file, take user-specified headers (so you can use one header file for multiple files that have identical structure), and read compressed data. However, FlexRaw cannot memory-map compressed data, and just as with FastRaw, the format will not work across multiple architectures. 🚩🚩

FlexRaw and FastRaw produce identical raw files and have essentially identical performance. Use whichever module seems to be more comfortable. I would generally recommend using FlexRaw over FastRaw, but the differences are minor for most uses.

Note that at the time of writing, memory-mapping is not possible on Windows.

For more details on FlexRaw, see PDL::IO::FlexRaw.


🎨 PDL::IO::GD 🎨

GD is a library for reading, creating, and writing bitmapped images, written in C. You can read more about the C-library here: <http://www.libgd.org/>.

In addition to reading and writing .png and .jpeg files, GD allows you to modify the bitmap by drawing rectangles, adding text, and probably much more. The documentation can be found here. As such, it should probably be not only considered an IO module, but a Graphics module as well. multitasking queen πŸ‘‘

This module provides PDL bindings for the GD library, which ought not be confused with the Perl bindings. The perl bindings were developed independently and can be found at GD, if you have Perl's GD bindings installed. (yes, they're two different things. don't @ me. πŸ’…)


🌦️ PDL::IO::Grib 🌦️

A CPAN module last updated in 2000 that allows you to read Grib files. GRIB is a data format commonly used in meteorology. In the off-chance that you have it installed, you should read PDL::IO::Grib's documentation. (2000. it's giving vintage. πŸ•°οΈ)


πŸ“š PDL::IO::HDF, PDL::IO::HDF5 πŸ“š

Provides an interface to HDF4 and HDF5 file formats, which are kinda like cross-platform binary XML files. HDF stands for Hierarchical Data Format. HDF was originally developed at the NCSA. To read more about HDF, see <http://www.hdfgroup.org/>. Note that HDF5 is not presently distributed with PDL, and neither HDF4 nor HDF5 will be installed unless you have the associated C libraries that these modules interface. Also note that the HDF5 library on CPAN is rather old and somebody from HDF contacted the mailing list in the Fall of 2009 to develop new and better HDF5 bindings for Perl. (2009!! ancient history era 😭)

You should look into the PDL::IO::HDF (4) documentation or PDL::IO::HDF5 documentation, depending upon which module you have installed.


πŸ›°οΈ PDL::IO::IDL πŸ›°οΈ

PDL has a module for reading IDL data files: PDL::IO::IDL. short, sweet, to the point. πŸŽ€


πŸ“ PDL::IO::Misc πŸ“

Provides mostly text-based IO routines. Data input and output is restricted mostly to tabular (i.e. two-dimensional) data sets, though limited support is provided for 3d data sets.

Alternative text-based modules support higher dimensions, such as PDL::IO::Dumper and PDL::IO::Storable. Check the PDL::IO::Misc documentation for more details.


🌌 PDL::IO::NDF 🌌

The Starlink Project <https://starlink.eao.hawaii.edu/starlink/> for UK astronomy developed a file format for N-Dimensional data Files, which it cleverly dubbed NDF. If you work with these files, you're in luck! πŸ€ Check the PDL::IO::NDF documentation for more details.


πŸ–ΌοΈ PDL::IO::Pic πŸ–ΌοΈ

Provides reading/writing of images to/from ndarrays, as well as creating MPEG animations! 🎬 The module uses the netpbm library, so you will need that on your machine in order for this to work. To read more, see the PDL::IO::Pic documentation. Also look into the next module, as well as PDL::IO::GD.


πŸ“ PDL::IO::Pnm πŸ“

Provides methods for reading and writing pnm files (of which pbm is but one). Check the PDL::IO::Pnm documentation for more details. Also check out the previous module and PDL::IO::GD.


πŸ—Ώ PDL::IO::STL πŸ—Ώ

Read and write STL (STereo Lithography) files, containing 3D objects. There are many files available from the "Thingiverse". You can then view the data in PDL::Graphics::TriD. 3D printing girlies, this one's for you. πŸ’œ


πŸ“¦ PDL::IO::Storable πŸ“¦

Implements the relevant methods to be able to store and retrieve ndarrays via Storable. True, you can use many methods to save a single ndarray. In contrast, this module is particularly useful if you need to save a complex Perl structure that contain ndarrays, such as an array of hashes, each of which contains ndarrays. it's giving nesting dolls, but make it data. πŸͺ†

Check the PDL::IO::Storable documentation for more details. See also PDL::IO::Dumper for an alternative stringifier.

🌈 Out-of-tree Third-party Modules 🌈

Not every slay lives in the main repo, bestie. Some of the cutest PDL IO modules are third-party and out-of-tree, doing their own lil thing πŸ’…. Here's the whole squad, no cap:

  • PDL::IO::CSV πŸ“ β€” Load/save PDL from/to CSV file (optimized for speed and large data).

See the PDL::IO::CSV documentation.

  • PDL::IO::DBI πŸ’½ β€” Load PDL from a DBI handle. See PDL::IO::CSV.
  • PDL::IO::Dcm πŸ₯ β€” Load PDL from a Dicom file. See PDL::IO::Dcm.
  • PDL::IO::Touchstone πŸ“‘ β€” A simple interface for reading and writing RF Touchstone files (also known as .sNp files). Touchstone files contain complex-valued RF sample data for a device or RF component with some number of ports. The data is (typically) measured by a vector network analyzer under stringent test conditions.

The resulting files are usually provided by manufacturers so RF design engineers can estimate signal behavior at various frequencies in their circuit designs. Examples of RF components include capacitors, inductors, resistors, filters, power splitters, etc.

See the PDL::IO::Touchstone documentation.

  • PDL::IO::MDIF πŸ”§ β€” A simple interface for reading and writing RF MDIF files (also known as MDF or .mdf files). MDIF files contain multiple Touchstone files in a text format for use in optimizing circuits. For example, a single MDIF file could contain the Touchstone RF data for each available value in a line of capacitors (ie, from 10pF to 1000pF) provided by a particular manufacturer.

See the PDL::IO::MDIF documentation

  • PDL::IO::Image πŸ–ΌοΈ β€” Load/save PDL from/to image files. See PDL::IO::Image.
  • PDL::IO::XLSX πŸ“Š β€” Load/save PDL from/to an Excel spreadsheet. See PDL::IO::XLSX.
  • PDL::NetCDF 🌍 β€” Load/save PDL from/to NetCDF files. See PDL::NetCDF.
  • PDL::IO::Nifti 🧠 β€” Load/save PDL from/to Nifti-1 files. See PDL::IO::Nifti.
  • PDL::IO::Matlab πŸ§ͺ β€” Load/save PDL from/to MATLAB files. See PDL::IO::Matlab.
  • PDL::IO::Sereal ✨ β€” Load/save PDL from/to Sereal files. See PDL::IO::Sereal.
  • PDL::CCS πŸ•ΈοΈ β€” Has IO modules to load/save PDL from/to sparse data file formats, including FITS, LDA-C, MatrixMarket, PETSc. See PDL::CCS.

Copyright 2010 David Mertens (dcmertens.perl@gmail.com). You can distribute and/or modify this document under the same terms as the current Perl license. Iconic behavior honestly πŸ’–

See: http://dev.perl.org/licenses/


And that's the whole page, bestie 🫢 This one's filed under perl v5.42.3, dated 2026-08-20, and the page is PDL::IO(3pm) β€” go read some data for me, mwah πŸ’…βœ¨

πŸ“¦ where this page comes from