XS is a Perl foreign function interface through which a program can call a C or C++ subroutine. XS or xsub is an abbreviation of "eXternal Subroutine", where external refers to programming languages external to Perl.
XS also refers to a glue language for specifying calling interfaces supporting such interfaces (see below).
Subroutine libraries in Perl are called modules, and modules that contain xsubs are called XS modules. Perl provides a framework for developing, packaging, distributing, and installing modules.
It may be desirable[why?] for a Perl program to invoke a C subroutine in order to handle very CPU or memory intensive tasks, to interface with hardware or low-level system facilities, or to make use of existing C subroutine libraries.
The Perl interpreter is a C program, so in principle[which?] there is no obstacle to calling from Perl to C. However, the XS interface is complex[why?] and highly technical[why?], and using it requires some understanding of the interpreter[why?]. The earliest reference on the subject[which?] was the perlguts POD.
XS module creation
To create an XS module, h2xs[further explanation needed] is first used[why?] to create an empty module. Next[why?], C subroutines are added, and the calling interfaces to the C subroutines are specified with a specialized glue language. Finally[why?], the module is compiled, tested, and installed with make.
Once an XS module is installed, it can be loaded into a Perl program with a use statement, like an ordinary Perl module. Once the module is loaded, the C subroutines can be called from Perl code, as if they were written in Perl.
XS modules are difficult[why?] to write and maintain, and they may only be installed if a C compiler and the header files that the Perl interpreter was compiled against are available. Also, new versions of Perl may break binary compatibility requiring XS modules to be recompiled.
- SWIG, an alternative to XS which also supports calling C and C++ functions from several other languages.
- "Gluing C++ And Perl Together". johnkeiser.com. August 27, 2001.
- Jenness, Tim & Cozens, Simon (2002). "Extending and Embedding Perl". Greenwich: Manning Publications Co. ISBN 1-930110-82-0
- perlxs Perl XS application programming interface
- perlxstut Perl XS tutorial
- perlguts Perl internal functions for those doing extensions
- perlapi Perl API listing (autogenerated)
- XS Mechanics tutorial
- Perl and C++[permanent dead link] building XS modules for C++
- xs-fun XS is fun: a simple and easy tutorial on writing Perl XS