1=head1 NAME 2 3perlxstut - Tutorial for writing XSUBs 4 5=head1 DESCRIPTION 6 7This tutorial will educate the reader on the steps involved in creating 8a Perl extension. The reader is assumed to have access to L<perlguts>, 9L<perlapi> and L<perlxs>. 10 11This tutorial starts with very simple examples and becomes more complex, 12with each new example adding new features. Certain concepts may not be 13completely explained until later in the tutorial in order to slowly ease 14the reader into building extensions. 15 16This tutorial was written from a Unix point of view. Where I know them 17to be otherwise different for other platforms (e.g. Win32), I will list 18them. If you find something that was missed, please let me know. 19 20=head1 SPECIAL NOTES 21 22=head2 make 23 24This tutorial assumes that the make program that Perl is configured to 25use is called C<make>. Instead of running "make" in the examples that 26follow, you may have to substitute whatever make program Perl has been 27configured to use. Running B<perl -V:make> should tell you what it is. 28 29=head2 Version caveat 30 31When writing a Perl extension for general consumption, one should expect that 32the extension will be used with versions of Perl different from the 33version available on your machine. Since you are reading this document, 34the version of Perl on your machine is probably 5.005 or later, but the users 35of your extension may have more ancient versions. 36 37To understand what kinds of incompatibilities one may expect, and in the rare 38case that the version of Perl on your machine is older than this document, 39see the section on "Troubleshooting these Examples" for more information. 40 41If your extension uses some features of Perl which are not available on older 42releases of Perl, your users would appreciate an early meaningful warning. 43You would probably put this information into the F<README> file, but nowadays 44installation of extensions may be performed automatically, guided by F<CPAN.pm> 45module or other tools. 46 47In MakeMaker-based installations, F<Makefile.PL> provides the earliest 48opportunity to perform version checks. One can put something like this 49in F<Makefile.PL> for this purpose: 50 51 eval { require 5.007 } 52 or die <<EOD; 53 ############ 54 ### This module uses frobnication framework which is not available before 55 ### version 5.007 of Perl. Upgrade your Perl before installing Kara::Mba. 56 ############ 57 EOD 58 59=head2 Dynamic Loading versus Static Loading 60 61It is commonly thought that if a system does not have the capability to 62dynamically load a library, you cannot build XSUBs. This is incorrect. 63You I<can> build them, but you must link the XSUBs subroutines with the 64rest of Perl, creating a new executable. This situation is similar to 65Perl 4. 66 67This tutorial can still be used on such a system. The XSUB build mechanism 68will check the system and build a dynamically-loadable library if possible, 69or else a static library and then, optionally, a new statically-linked 70executable with that static library linked in. 71 72Should you wish to build a statically-linked executable on a system which 73can dynamically load libraries, you may, in all the following examples, 74where the command "C<make>" with no arguments is executed, run the command 75"C<make perl>" instead. 76 77If you have generated such a statically-linked executable by choice, then 78instead of saying "C<make test>", you should say "C<make test_static>". 79On systems that cannot build dynamically-loadable libraries at all, simply 80saying "C<make test>" is sufficient. 81 82=head1 TUTORIAL 83 84Now let's go on with the show! 85 86=head2 EXAMPLE 1 87 88Our first extension will be very simple. When we call the routine in the 89extension, it will print out a well-known message and return. 90 91Run "C<h2xs -A -n Mytest>". This creates a directory named Mytest, 92possibly under ext/ if that directory exists in the current working 93directory. Several files will be created under the Mytest dir, including 94MANIFEST, Makefile.PL, lib/Mytest.pm, Mytest.xs, t/Mytest.t, and Changes. 95 96The MANIFEST file contains the names of all the files just created in the 97Mytest directory. 98 99The file Makefile.PL should look something like this: 100 101 use ExtUtils::MakeMaker; 102 # See lib/ExtUtils/MakeMaker.pm for details of how to influence 103 # the contents of the Makefile that is written. 104 WriteMakefile( 105 NAME => 'Mytest', 106 VERSION_FROM => 'Mytest.pm', # finds $VERSION 107 LIBS => [''], # e.g., '-lm' 108 DEFINE => '', # e.g., '-DHAVE_SOMETHING' 109 INC => '', # e.g., '-I/usr/include/other' 110 ); 111 112The file Mytest.pm should start with something like this: 113 114 package Mytest; 115 116 use 5.008008; 117 use strict; 118 use warnings; 119 120 require Exporter; 121 122 our @ISA = qw(Exporter); 123 our %EXPORT_TAGS = ( 'all' => [ qw( 124 125 ) ] ); 126 127 our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); 128 129 our @EXPORT = qw( 130 131 ); 132 133 our $VERSION = '0.01'; 134 135 require XSLoader; 136 XSLoader::load('Mytest', $VERSION); 137 138 # Preloaded methods go here. 139 140 1; 141 __END__ 142 # Below is the stub of documentation for your module. You better edit it! 143 144The rest of the .pm file contains sample code for providing documentation for 145the extension. 146 147Finally, the Mytest.xs file should look something like this: 148 149 #include "EXTERN.h" 150 #include "perl.h" 151 #include "XSUB.h" 152 153 #include "ppport.h" 154 155 MODULE = Mytest PACKAGE = Mytest 156 157Let's edit the .xs file by adding this to the end of the file: 158 159 void 160 hello() 161 CODE: 162 printf("Hello, world!\n"); 163 164It is okay for the lines starting at the "CODE:" line to not be indented. 165However, for readability purposes, it is suggested that you indent CODE: 166one level and the lines following one more level. 167 168Now we'll run "C<perl Makefile.PL>". This will create a real Makefile, 169which make needs. Its output looks something like: 170 171 % perl Makefile.PL 172 Checking if your kit is complete... 173 Looks good 174 Writing Makefile for Mytest 175 % 176 177Now, running make will produce output that looks something like this (some 178long lines have been shortened for clarity and some extraneous lines have 179been deleted): 180 181 % make 182 cp lib/Mytest.pm blib/lib/Mytest.pm 183 perl xsubpp -typemap typemap Mytest.xs > Mytest.xsc && mv Mytest.xsc Mytest.c 184 Please specify prototyping behavior for Mytest.xs (see perlxs manual) 185 cc -c Mytest.c 186 Running Mkbootstrap for Mytest () 187 chmod 644 Mytest.bs 188 rm -f blib/arch/auto/Mytest/Mytest.so 189 cc -shared -L/usr/local/lib Mytest.o -o blib/arch/auto/Mytest/Mytest.so \ 190 \ 191 192 chmod 755 blib/arch/auto/Mytest/Mytest.so 193 cp Mytest.bs blib/arch/auto/Mytest/Mytest.bs 194 chmod 644 blib/arch/auto/Mytest/Mytest.bs 195 Manifying blib/man3/Mytest.3pm 196 % 197 198You can safely ignore the line about "prototyping behavior" - it is 199explained in L<perlxs/"The PROTOTYPES: Keyword">. 200 201Perl has its own special way of easily writing test scripts, but for this 202example only, we'll create our own test script. Create a file called hello 203that looks like this: 204 205 #! /opt/perl5/bin/perl 206 207 use ExtUtils::testlib; 208 209 use Mytest; 210 211 Mytest::hello(); 212 213Now we make the script executable (C<chmod +x hello>), run the script 214and we should see the following output: 215 216 % ./hello 217 Hello, world! 218 % 219 220=head2 EXAMPLE 2 221 222Now let's add to our extension a subroutine that will take a single numeric 223argument as input and return 1 if the number is even or 0 if the number 224is odd. 225 226Add the following to the end of Mytest.xs: 227 228 int 229 is_even(input) 230 int input 231 CODE: 232 RETVAL = (input % 2 == 0); 233 OUTPUT: 234 RETVAL 235 236There does not need to be whitespace at the start of the "C<int input>" 237line, but it is useful for improving readability. Placing a semi-colon at 238the end of that line is also optional. Any amount and kind of whitespace 239may be placed between the "C<int>" and "C<input>". 240 241Now re-run make to rebuild our new shared library. 242 243Now perform the same steps as before, generating a Makefile from the 244Makefile.PL file, and running make. 245 246In order to test that our extension works, we now need to look at the 247file Mytest.t. This file is set up to imitate the same kind of testing 248structure that Perl itself has. Within the test script, you perform a 249number of tests to confirm the behavior of the extension, printing "ok" 250when the test is correct, "not ok" when it is not. 251 252 use Test::More tests => 4; 253 BEGIN { use_ok('Mytest') }; 254 255 ######################### 256 257 # Insert your test code below, the Test::More module is use()ed here so read 258 # its man page ( perldoc Test::More ) for help writing this test script. 259 260 is(&Mytest::is_even(0), 1); 261 is(&Mytest::is_even(1), 0); 262 is(&Mytest::is_even(2), 1); 263 264We will be calling the test script through the command "C<make test>". You 265should see output that looks something like this: 266 267 %make test 268 PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t 269 t/Mytest....ok 270 All tests successful. 271 Files=1, Tests=4, 0 wallclock secs ( 0.03 cusr + 0.00 csys = 0.03 CPU) 272 % 273 274=head2 What has gone on? 275 276The program h2xs is the starting point for creating extensions. In later 277examples we'll see how we can use h2xs to read header files and generate 278templates to connect to C routines. 279 280h2xs creates a number of files in the extension directory. The file 281Makefile.PL is a perl script which will generate a true Makefile to build 282the extension. We'll take a closer look at it later. 283 284The .pm and .xs files contain the meat of the extension. The .xs file holds 285the C routines that make up the extension. The .pm file contains routines 286that tell Perl how to load your extension. 287 288Generating the Makefile and running C<make> created a directory called blib 289(which stands for "build library") in the current working directory. This 290directory will contain the shared library that we will build. Once we have 291tested it, we can install it into its final location. 292 293Invoking the test script via "C<make test>" did something very important. 294It invoked perl with all those C<-I> arguments so that it could find the 295various files that are part of the extension. It is I<very> important that 296while you are still testing extensions that you use "C<make test>". If you 297try to run the test script all by itself, you will get a fatal error. 298Another reason it is important to use "C<make test>" to run your test 299script is that if you are testing an upgrade to an already-existing version, 300using "C<make test>" ensures that you will test your new extension, not the 301already-existing version. 302 303When Perl sees a C<use extension;>, it searches for a file with the same name 304as the C<use>'d extension that has a .pm suffix. If that file cannot be found, 305Perl dies with a fatal error. The default search path is contained in the 306C<@INC> array. 307 308In our case, Mytest.pm tells perl that it will need the Exporter and Dynamic 309Loader extensions. It then sets the C<@ISA> and C<@EXPORT> arrays and the 310C<$VERSION> scalar; finally it tells perl to bootstrap the module. Perl 311will call its dynamic loader routine (if there is one) and load the shared 312library. 313 314The two arrays C<@ISA> and C<@EXPORT> are very important. The C<@ISA> 315array contains a list of other packages in which to search for methods (or 316subroutines) that do not exist in the current package. This is usually 317only important for object-oriented extensions (which we will talk about 318much later), and so usually doesn't need to be modified. 319 320The C<@EXPORT> array tells Perl which of the extension's variables and 321subroutines should be placed into the calling package's namespace. Because 322you don't know if the user has already used your variable and subroutine 323names, it's vitally important to carefully select what to export. Do I<not> 324export method or variable names I<by default> without a good reason. 325 326As a general rule, if the module is trying to be object-oriented then don't 327export anything. If it's just a collection of functions and variables, then 328you can export them via another array, called C<@EXPORT_OK>. This array 329does not automatically place its subroutine and variable names into the 330namespace unless the user specifically requests that this be done. 331 332See L<perlmod> for more information. 333 334The C<$VERSION> variable is used to ensure that the .pm file and the shared 335library are "in sync" with each other. Any time you make changes to 336the .pm or .xs files, you should increment the value of this variable. 337 338=head2 Writing good test scripts 339 340The importance of writing good test scripts cannot be over-emphasized. You 341should closely follow the "ok/not ok" style that Perl itself uses, so that 342it is very easy and unambiguous to determine the outcome of each test case. 343When you find and fix a bug, make sure you add a test case for it. 344 345By running "C<make test>", you ensure that your Mytest.t script runs and uses 346the correct version of your extension. If you have many test cases, 347save your test files in the "t" directory and use the suffix ".t". 348When you run "C<make test>", all of these test files will be executed. 349 350=head2 EXAMPLE 3 351 352Our third extension will take one argument as its input, round off that 353value, and set the I<argument> to the rounded value. 354 355Add the following to the end of Mytest.xs: 356 357 void 358 round(arg) 359 double arg 360 CODE: 361 if (arg > 0.0) { 362 arg = floor(arg + 0.5); 363 } else if (arg < 0.0) { 364 arg = ceil(arg - 0.5); 365 } else { 366 arg = 0.0; 367 } 368 OUTPUT: 369 arg 370 371Edit the Makefile.PL file so that the corresponding line looks like this: 372 373 'LIBS' => ['-lm'], # e.g., '-lm' 374 375Generate the Makefile and run make. Change the test number in Mytest.t to 376"9" and add the following tests: 377 378 $i = -1.5; &Mytest::round($i); is( $i, -2.0 ); 379 $i = -1.1; &Mytest::round($i); is( $i, -1.0 ); 380 $i = 0.0; &Mytest::round($i); is( $i, 0.0 ); 381 $i = 0.5; &Mytest::round($i); is( $i, 1.0 ); 382 $i = 1.2; &Mytest::round($i); is( $i, 1.0 ); 383 384Running "C<make test>" should now print out that all nine tests are okay. 385 386Notice that in these new test cases, the argument passed to round was a 387scalar variable. You might be wondering if you can round a constant or 388literal. To see what happens, temporarily add the following line to Mytest.t: 389 390 &Mytest::round(3); 391 392Run "C<make test>" and notice that Perl dies with a fatal error. Perl won't 393let you change the value of constants! 394 395=head2 What's new here? 396 397=over 4 398 399=item * 400 401We've made some changes to Makefile.PL. In this case, we've specified an 402extra library to be linked into the extension's shared library, the math 403library libm in this case. We'll talk later about how to write XSUBs that 404can call every routine in a library. 405 406=item * 407 408The value of the function is not being passed back as the function's return 409value, but by changing the value of the variable that was passed into the 410function. You might have guessed that when you saw that the return value 411of round is of type "void". 412 413=back 414 415=head2 Input and Output Parameters 416 417You specify the parameters that will be passed into the XSUB on the line(s) 418after you declare the function's return value and name. Each input parameter 419line starts with optional whitespace, and may have an optional terminating 420semicolon. 421 422The list of output parameters occurs at the very end of the function, just 423after the OUTPUT: directive. The use of RETVAL tells Perl that you 424wish to send this value back as the return value of the XSUB function. In 425Example 3, we wanted the "return value" placed in the original variable 426which we passed in, so we listed it (and not RETVAL) in the OUTPUT: section. 427 428=head2 The XSUBPP Program 429 430The B<xsubpp> program takes the XS code in the .xs file and translates it into 431C code, placing it in a file whose suffix is .c. The C code created makes 432heavy use of the C functions within Perl. 433 434=head2 The TYPEMAP file 435 436The B<xsubpp> program uses rules to convert from Perl's data types (scalar, 437array, etc.) to C's data types (int, char, etc.). These rules are stored 438in the typemap file ($PERLLIB/ExtUtils/typemap). There's a brief discussion 439below, but all the nitty-gritty details can be found in L<perlxstypemap>. 440If you have a new-enough version of perl (5.16 and up) or an upgraded 441XS compiler (C<ExtUtils::ParseXS> 3.13_01 or better), then you can inline 442typemaps in your XS instead of writing separate files. 443Either way, this typemap thing is split into three parts: 444 445The first section maps various C data types to a name, which corresponds 446somewhat with the various Perl types. The second section contains C code 447which B<xsubpp> uses to handle input parameters. The third section contains 448C code which B<xsubpp> uses to handle output parameters. 449 450Let's take a look at a portion of the .c file created for our extension. 451The file name is Mytest.c: 452 453 XS(XS_Mytest_round) 454 { 455 dXSARGS; 456 if (items != 1) 457 Perl_croak(aTHX_ "Usage: Mytest::round(arg)"); 458 PERL_UNUSED_VAR(cv); /* -W */ 459 { 460 double arg = (double)SvNV(ST(0)); /* XXXXX */ 461 if (arg > 0.0) { 462 arg = floor(arg + 0.5); 463 } else if (arg < 0.0) { 464 arg = ceil(arg - 0.5); 465 } else { 466 arg = 0.0; 467 } 468 sv_setnv(ST(0), (double)arg); /* XXXXX */ 469 SvSETMAGIC(ST(0)); 470 } 471 XSRETURN_EMPTY; 472 } 473 474Notice the two lines commented with "XXXXX". If you check the first part 475of the typemap file (or section), you'll see that doubles are of type 476T_DOUBLE. In the INPUT part of the typemap, an argument that is T_DOUBLE 477is assigned to the variable arg by calling the routine SvNV on something, 478then casting it to double, then assigned to the variable arg. Similarly, 479in the OUTPUT section, once arg has its final value, it is passed to the 480sv_setnv function to be passed back to the calling subroutine. These two 481functions are explained in L<perlguts>; we'll talk more later about what 482that "ST(0)" means in the section on the argument stack. 483 484=head2 Warning about Output Arguments 485 486In general, it's not a good idea to write extensions that modify their input 487parameters, as in Example 3. Instead, you should probably return multiple 488values in an array and let the caller handle them (we'll do this in a later 489example). However, in order to better accommodate calling pre-existing C 490routines, which often do modify their input parameters, this behavior is 491tolerated. 492 493=head2 EXAMPLE 4 494 495In this example, we'll now begin to write XSUBs that will interact with 496pre-defined C libraries. To begin with, we will build a small library of 497our own, then let h2xs write our .pm and .xs files for us. 498 499Create a new directory called Mytest2 at the same level as the directory 500Mytest. In the Mytest2 directory, create another directory called mylib, 501and cd into that directory. 502 503Here we'll create some files that will generate a test library. These will 504include a C source file and a header file. We'll also create a Makefile.PL 505in this directory. Then we'll make sure that running make at the Mytest2 506level will automatically run this Makefile.PL file and the resulting Makefile. 507 508In the mylib directory, create a file mylib.h that looks like this: 509 510 #define TESTVAL 4 511 512 extern double foo(int, long, const char*); 513 514Also create a file mylib.c that looks like this: 515 516 #include <stdlib.h> 517 #include "./mylib.h" 518 519 double 520 foo(int a, long b, const char *c) 521 { 522 return (a + b + atof(c) + TESTVAL); 523 } 524 525And finally create a file Makefile.PL that looks like this: 526 527 use ExtUtils::MakeMaker; 528 $Verbose = 1; 529 WriteMakefile( 530 NAME => 'Mytest2::mylib', 531 SKIP => [qw(all static static_lib dynamic dynamic_lib)], 532 clean => {'FILES' => 'libmylib$(LIB_EXT)'}, 533 ); 534 535 536 sub MY::top_targets { 537 ' 538 all :: static 539 540 pure_all :: static 541 542 static :: libmylib$(LIB_EXT) 543 544 libmylib$(LIB_EXT): $(O_FILES) 545 $(AR) cr libmylib$(LIB_EXT) $(O_FILES) 546 $(RANLIB) libmylib$(LIB_EXT) 547 548 '; 549 } 550 551Make sure you use a tab and not spaces on the lines beginning with "$(AR)" 552and "$(RANLIB)". Make will not function properly if you use spaces. 553It has also been reported that the "cr" argument to $(AR) is unnecessary 554on Win32 systems. 555 556We will now create the main top-level Mytest2 files. Change to the directory 557above Mytest2 and run the following command: 558 559 % h2xs -O -n Mytest2 ./Mytest2/mylib/mylib.h 560 561This will print out a warning about overwriting Mytest2, but that's okay. 562Our files are stored in Mytest2/mylib, and will be untouched. 563 564The normal Makefile.PL that h2xs generates doesn't know about the mylib 565directory. We need to tell it that there is a subdirectory and that we 566will be generating a library in it. Let's add the argument MYEXTLIB to 567the WriteMakefile call so that it looks like this: 568 569 WriteMakefile( 570 'NAME' => 'Mytest2', 571 'VERSION_FROM' => 'Mytest2.pm', # finds $VERSION 572 'LIBS' => [''], # e.g., '-lm' 573 'DEFINE' => '', # e.g., '-DHAVE_SOMETHING' 574 'INC' => '', # e.g., '-I/usr/include/other' 575 'MYEXTLIB' => 'mylib/libmylib$(LIB_EXT)', 576 ); 577 578and then at the end add a subroutine (which will override the pre-existing 579subroutine). Remember to use a tab character to indent the line beginning 580with "cd"! 581 582 sub MY::postamble { 583 ' 584 $(MYEXTLIB): mylib/Makefile 585 cd mylib && $(MAKE) $(PASSTHRU) 586 '; 587 } 588 589Let's also fix the MANIFEST file so that it accurately reflects the contents 590of our extension. The single line that says "mylib" should be replaced by 591the following three lines: 592 593 mylib/Makefile.PL 594 mylib/mylib.c 595 mylib/mylib.h 596 597To keep our namespace nice and unpolluted, edit the .pm file and change 598the variable C<@EXPORT> to C<@EXPORT_OK>. Finally, in the 599.xs file, edit the #include line to read: 600 601 #include "mylib/mylib.h" 602 603And also add the following function definition to the end of the .xs file: 604 605 double 606 foo(a,b,c) 607 int a 608 long b 609 const char * c 610 OUTPUT: 611 RETVAL 612 613Now we also need to create a typemap because the default Perl doesn't 614currently support the C<const char *> type. Include a new TYPEMAP 615section in your XS code before the above function: 616 617 TYPEMAP: <<END; 618 const char * T_PV 619 END 620 621Now run perl on the top-level Makefile.PL. Notice that it also created a 622Makefile in the mylib directory. Run make and watch that it does cd into 623the mylib directory and run make in there as well. 624 625Now edit the Mytest2.t script and change the number of tests to "4", 626and add the following lines to the end of the script: 627 628 is( &Mytest2::foo(1, 2, "Hello, world!"), 7 ); 629 is( &Mytest2::foo(1, 2, "0.0"), 7 ); 630 ok( abs(&Mytest2::foo(0, 0, "-3.4") - 0.6) <= 0.01 ); 631 632(When dealing with floating-point comparisons, it is best to not check for 633equality, but rather that the difference between the expected and actual 634result is below a certain amount (called epsilon) which is 0.01 in this case) 635 636Run "C<make test>" and all should be well. There are some warnings on missing tests 637for the Mytest2::mylib extension, but you can ignore them. 638 639=head2 What has happened here? 640 641Unlike previous examples, we've now run h2xs on a real include file. This 642has caused some extra goodies to appear in both the .pm and .xs files. 643 644=over 4 645 646=item * 647 648In the .xs file, there's now a #include directive with the absolute path to 649the mylib.h header file. We changed this to a relative path so that we 650could move the extension directory if we wanted to. 651 652=item * 653 654There's now some new C code that's been added to the .xs file. The purpose 655of the C<constant> routine is to make the values that are #define'd in the 656header file accessible by the Perl script (by calling either C<TESTVAL> or 657C<&Mytest2::TESTVAL>). There's also some XS code to allow calls to the 658C<constant> routine. 659 660=item * 661 662The .pm file originally exported the name C<TESTVAL> in the C<@EXPORT> array. 663This could lead to name clashes. A good rule of thumb is that if the #define 664is only going to be used by the C routines themselves, and not by the user, 665they should be removed from the C<@EXPORT> array. Alternately, if you don't 666mind using the "fully qualified name" of a variable, you could move most 667or all of the items from the C<@EXPORT> array into the C<@EXPORT_OK> array. 668 669=item * 670 671If our include file had contained #include directives, these would not have 672been processed by h2xs. There is no good solution to this right now. 673 674=item * 675 676We've also told Perl about the library that we built in the mylib 677subdirectory. That required only the addition of the C<MYEXTLIB> variable 678to the WriteMakefile call and the replacement of the postamble subroutine 679to cd into the subdirectory and run make. The Makefile.PL for the 680library is a bit more complicated, but not excessively so. Again we 681replaced the postamble subroutine to insert our own code. This code 682simply specified that the library to be created here was a static archive 683library (as opposed to a dynamically loadable library) and provided the 684commands to build it. 685 686=back 687 688=head2 Anatomy of .xs file 689 690The .xs file of L<"EXAMPLE 4"> contained some new elements. To understand 691the meaning of these elements, pay attention to the line which reads 692 693 MODULE = Mytest2 PACKAGE = Mytest2 694 695Anything before this line is plain C code which describes which headers 696to include, and defines some convenience functions. No translations are 697performed on this part, apart from having embedded POD documentation 698skipped over (see L<perlpod>) it goes into the generated output C file as is. 699 700Anything after this line is the description of XSUB functions. 701These descriptions are translated by B<xsubpp> into C code which 702implements these functions using Perl calling conventions, and which 703makes these functions visible from Perl interpreter. 704 705Pay a special attention to the function C<constant>. This name appears 706twice in the generated .xs file: once in the first part, as a static C 707function, then another time in the second part, when an XSUB interface to 708this static C function is defined. 709 710This is quite typical for .xs files: usually the .xs file provides 711an interface to an existing C function. Then this C function is defined 712somewhere (either in an external library, or in the first part of .xs file), 713and a Perl interface to this function (i.e. "Perl glue") is described in the 714second part of .xs file. The situation in L<"EXAMPLE 1">, L<"EXAMPLE 2">, 715and L<"EXAMPLE 3">, when all the work is done inside the "Perl glue", is 716somewhat of an exception rather than the rule. 717 718=head2 Getting the fat out of XSUBs 719 720In L<"EXAMPLE 4"> the second part of .xs file contained the following 721description of an XSUB: 722 723 double 724 foo(a,b,c) 725 int a 726 long b 727 const char * c 728 OUTPUT: 729 RETVAL 730 731Note that in contrast with L<"EXAMPLE 1">, L<"EXAMPLE 2"> and L<"EXAMPLE 3">, 732this description does not contain the actual I<code> for what is done 733during a call to Perl function foo(). To understand what is going 734on here, one can add a CODE section to this XSUB: 735 736 double 737 foo(a,b,c) 738 int a 739 long b 740 const char * c 741 CODE: 742 RETVAL = foo(a,b,c); 743 OUTPUT: 744 RETVAL 745 746However, these two XSUBs provide almost identical generated C code: B<xsubpp> 747compiler is smart enough to figure out the C<CODE:> section from the first 748two lines of the description of XSUB. What about C<OUTPUT:> section? In 749fact, that is absolutely the same! The C<OUTPUT:> section can be removed 750as well, I<as far as C<CODE:> section or C<PPCODE:> section> is not 751specified: B<xsubpp> can see that it needs to generate a function call 752section, and will autogenerate the OUTPUT section too. Thus one can 753shortcut the XSUB to become: 754 755 double 756 foo(a,b,c) 757 int a 758 long b 759 const char * c 760 761Can we do the same with an XSUB 762 763 int 764 is_even(input) 765 int input 766 CODE: 767 RETVAL = (input % 2 == 0); 768 OUTPUT: 769 RETVAL 770 771of L<"EXAMPLE 2">? To do this, one needs to define a C function C<int 772is_even(int input)>. As we saw in L<Anatomy of .xs file>, a proper place 773for this definition is in the first part of .xs file. In fact a C function 774 775 int 776 is_even(int arg) 777 { 778 return (arg % 2 == 0); 779 } 780 781is probably overkill for this. Something as simple as a C<#define> will 782do too: 783 784 #define is_even(arg) ((arg) % 2 == 0) 785 786After having this in the first part of .xs file, the "Perl glue" part becomes 787as simple as 788 789 int 790 is_even(input) 791 int input 792 793This technique of separation of the glue part from the workhorse part has 794obvious tradeoffs: if you want to change a Perl interface, you need to 795change two places in your code. However, it removes a lot of clutter, 796and makes the workhorse part independent from idiosyncrasies of Perl calling 797convention. (In fact, there is nothing Perl-specific in the above description, 798a different version of B<xsubpp> might have translated this to TCL glue or 799Python glue as well.) 800 801=head2 More about XSUB arguments 802 803With the completion of Example 4, we now have an easy way to simulate some 804real-life libraries whose interfaces may not be the cleanest in the world. 805We shall now continue with a discussion of the arguments passed to the 806B<xsubpp> compiler. 807 808When you specify arguments to routines in the .xs file, you are really 809passing three pieces of information for each argument listed. The first 810piece is the order of that argument relative to the others (first, second, 811etc). The second is the type of argument, and consists of the type 812declaration of the argument (e.g., int, char*, etc). The third piece is 813the calling convention for the argument in the call to the library function. 814 815While Perl passes arguments to functions by reference, 816C passes arguments by value; to implement a C function which modifies data 817of one of the "arguments", the actual argument of this C function would be 818a pointer to the data. Thus two C functions with declarations 819 820 int string_length(char *s); 821 int upper_case_char(char *cp); 822 823may have completely different semantics: the first one may inspect an array 824of chars pointed by s, and the second one may immediately dereference C<cp> 825and manipulate C<*cp> only (using the return value as, say, a success 826indicator). From Perl one would use these functions in 827a completely different manner. 828 829One conveys this info to B<xsubpp> by replacing C<*> before the 830argument by C<&>. C<&> means that the argument should be passed to a library 831function by its address. The above two function may be XSUB-ified as 832 833 int 834 string_length(s) 835 char * s 836 837 int 838 upper_case_char(cp) 839 char &cp 840 841For example, consider: 842 843 int 844 foo(a,b) 845 char &a 846 char * b 847 848The first Perl argument to this function would be treated as a char and assigned 849to the variable a, and its address would be passed into the function foo. 850The second Perl argument would be treated as a string pointer and assigned to the 851variable b. The I<value> of b would be passed into the function foo. The 852actual call to the function foo that B<xsubpp> generates would look like this: 853 854 foo(&a, b); 855 856B<xsubpp> will parse the following function argument lists identically: 857 858 char &a 859 char&a 860 char & a 861 862However, to help ease understanding, it is suggested that you place a "&" 863next to the variable name and away from the variable type), and place a 864"*" near the variable type, but away from the variable name (as in the 865call to foo above). By doing so, it is easy to understand exactly what 866will be passed to the C function; it will be whatever is in the "last 867column". 868 869You should take great pains to try to pass the function the type of variable 870it wants, when possible. It will save you a lot of trouble in the long run. 871 872=head2 The Argument Stack 873 874If we look at any of the C code generated by any of the examples except 875example 1, you will notice a number of references to ST(n), where n is 876usually 0. "ST" is actually a macro that points to the n'th argument 877on the argument stack. ST(0) is thus the first argument on the stack and 878therefore the first argument passed to the XSUB, ST(1) is the second 879argument, and so on. 880 881When you list the arguments to the XSUB in the .xs file, that tells B<xsubpp> 882which argument corresponds to which of the argument stack (i.e., the first 883one listed is the first argument, and so on). You invite disaster if you 884do not list them in the same order as the function expects them. 885 886The actual values on the argument stack are pointers to the values passed 887in. When an argument is listed as being an OUTPUT value, its corresponding 888value on the stack (i.e., ST(0) if it was the first argument) is changed. 889You can verify this by looking at the C code generated for Example 3. 890The code for the round() XSUB routine contains lines that look like this: 891 892 double arg = (double)SvNV(ST(0)); 893 /* Round the contents of the variable arg */ 894 sv_setnv(ST(0), (double)arg); 895 896The arg variable is initially set by taking the value from ST(0), then is 897stored back into ST(0) at the end of the routine. 898 899XSUBs are also allowed to return lists, not just scalars. This must be 900done by manipulating stack values ST(0), ST(1), etc, in a subtly 901different way. See L<perlxs> for details. 902 903XSUBs are also allowed to avoid automatic conversion of Perl function arguments 904to C function arguments. See L<perlxs> for details. Some people prefer 905manual conversion by inspecting C<ST(i)> even in the cases when automatic 906conversion will do, arguing that this makes the logic of an XSUB call clearer. 907Compare with L<"Getting the fat out of XSUBs"> for a similar tradeoff of 908a complete separation of "Perl glue" and "workhorse" parts of an XSUB. 909 910While experts may argue about these idioms, a novice to Perl guts may 911prefer a way which is as little Perl-guts-specific as possible, meaning 912automatic conversion and automatic call generation, as in 913L<"Getting the fat out of XSUBs">. This approach has the additional 914benefit of protecting the XSUB writer from future changes to the Perl API. 915 916=head2 Extending your Extension 917 918Sometimes you might want to provide some extra methods or subroutines 919to assist in making the interface between Perl and your extension simpler 920or easier to understand. These routines should live in the .pm file. 921Whether they are automatically loaded when the extension itself is loaded 922or only loaded when called depends on where in the .pm file the subroutine 923definition is placed. You can also consult L<AutoLoader> for an alternate 924way to store and load your extra subroutines. 925 926=head2 Documenting your Extension 927 928There is absolutely no excuse for not documenting your extension. 929Documentation belongs in the .pm file. This file will be fed to pod2man, 930and the embedded documentation will be converted to the manpage format, 931then placed in the blib directory. It will be copied to Perl's 932manpage directory when the extension is installed. 933 934You may intersperse documentation and Perl code within the .pm file. 935In fact, if you want to use method autoloading, you must do this, 936as the comment inside the .pm file explains. 937 938See L<perlpod> for more information about the pod format. 939 940=head2 Installing your Extension 941 942Once your extension is complete and passes all its tests, installing it 943is quite simple: you simply run "make install". You will either need 944to have write permission into the directories where Perl is installed, 945or ask your system administrator to run the make for you. 946 947Alternately, you can specify the exact directory to place the extension's 948files by placing a "PREFIX=/destination/directory" after the make install. 949(or in between the make and install if you have a brain-dead version of make). 950This can be very useful if you are building an extension that will eventually 951be distributed to multiple systems. You can then just archive the files in 952the destination directory and distribute them to your destination systems. 953 954=head2 EXAMPLE 5 955 956In this example, we'll do some more work with the argument stack. The 957previous examples have all returned only a single value. We'll now 958create an extension that returns an array. 959 960This extension is very Unix-oriented (struct statfs and the statfs system 961call). If you are not running on a Unix system, you can substitute for 962statfs any other function that returns multiple values, you can hard-code 963values to be returned to the caller (although this will be a bit harder 964to test the error case), or you can simply not do this example. If you 965change the XSUB, be sure to fix the test cases to match the changes. 966 967Return to the Mytest directory and add the following code to the end of 968Mytest.xs: 969 970 void 971 statfs(path) 972 char * path 973 INIT: 974 int i; 975 struct statfs buf; 976 977 PPCODE: 978 i = statfs(path, &buf); 979 if (i == 0) { 980 XPUSHs(sv_2mortal(newSVnv(buf.f_bavail))); 981 XPUSHs(sv_2mortal(newSVnv(buf.f_bfree))); 982 XPUSHs(sv_2mortal(newSVnv(buf.f_blocks))); 983 XPUSHs(sv_2mortal(newSVnv(buf.f_bsize))); 984 XPUSHs(sv_2mortal(newSVnv(buf.f_ffree))); 985 XPUSHs(sv_2mortal(newSVnv(buf.f_files))); 986 XPUSHs(sv_2mortal(newSVnv(buf.f_type))); 987 } else { 988 XPUSHs(sv_2mortal(newSVnv(errno))); 989 } 990 991You'll also need to add the following code to the top of the .xs file, just 992after the include of "XSUB.h": 993 994 #include <sys/vfs.h> 995 996Also add the following code segment to Mytest.t while incrementing the "9" 997tests to "11": 998 999 @a = &Mytest::statfs("/blech"); 1000 ok( scalar(@a) == 1 && $a[0] == 2 ); 1001 @a = &Mytest::statfs("/"); 1002 is( scalar(@a), 7 ); 1003 1004=head2 New Things in this Example 1005 1006This example added quite a few new concepts. We'll take them one at a time. 1007 1008=over 4 1009 1010=item * 1011 1012The INIT: directive contains code that will be placed immediately after 1013the argument stack is decoded. C does not allow variable declarations at 1014arbitrary locations inside a function, 1015so this is usually the best way to declare local variables needed by the XSUB. 1016(Alternatively, one could put the whole C<PPCODE:> section into braces, and 1017put these declarations on top.) 1018 1019=item * 1020 1021This routine also returns a different number of arguments depending on the 1022success or failure of the call to statfs. If there is an error, the error 1023number is returned as a single-element array. If the call is successful, 1024then a 7-element array is returned. Since only one argument is passed into 1025this function, we need room on the stack to hold the 7 values which may be 1026returned. 1027 1028We do this by using the PPCODE: directive, rather than the CODE: directive. 1029This tells B<xsubpp> that we will be managing the return values that will be 1030put on the argument stack by ourselves. 1031 1032=item * 1033 1034When we want to place values to be returned to the caller onto the stack, 1035we use the series of macros that begin with "XPUSH". There are five 1036different versions, for placing integers, unsigned integers, doubles, 1037strings, and Perl scalars on the stack. In our example, we placed a 1038Perl scalar onto the stack. (In fact this is the only macro which 1039can be used to return multiple values.) 1040 1041The XPUSH* macros will automatically extend the return stack to prevent 1042it from being overrun. You push values onto the stack in the order you 1043want them seen by the calling program. 1044 1045=item * 1046 1047The values pushed onto the return stack of the XSUB are actually mortal SV's. 1048They are made mortal so that once the values are copied by the calling 1049program, the SV's that held the returned values can be deallocated. 1050If they were not mortal, then they would continue to exist after the XSUB 1051routine returned, but would not be accessible. This is a memory leak. 1052 1053=item * 1054 1055If we were interested in performance, not in code compactness, in the success 1056branch we would not use C<XPUSHs> macros, but C<PUSHs> macros, and would 1057pre-extend the stack before pushing the return values: 1058 1059 EXTEND(SP, 7); 1060 1061The tradeoff is that one needs to calculate the number of return values 1062in advance (though overextending the stack will not typically hurt 1063anything but memory consumption). 1064 1065Similarly, in the failure branch we could use C<PUSHs> I<without> extending 1066the stack: the Perl function reference comes to an XSUB on the stack, thus 1067the stack is I<always> large enough to take one return value. 1068 1069=back 1070 1071=head2 EXAMPLE 6 1072 1073In this example, we will accept a reference to an array as an input 1074parameter, and return a reference to an array of hashes. This will 1075demonstrate manipulation of complex Perl data types from an XSUB. 1076 1077This extension is somewhat contrived. It is based on the code in 1078the previous example. It calls the statfs function multiple times, 1079accepting a reference to an array of filenames as input, and returning 1080a reference to an array of hashes containing the data for each of the 1081filesystems. 1082 1083Return to the Mytest directory and add the following code to the end of 1084Mytest.xs: 1085 1086 SV * 1087 multi_statfs(paths) 1088 SV * paths 1089 INIT: 1090 AV * results; 1091 I32 numpaths = 0; 1092 int i, n; 1093 struct statfs buf; 1094 1095 SvGETMAGIC(paths); 1096 if ((!SvROK(paths)) 1097 || (SvTYPE(SvRV(paths)) != SVt_PVAV) 1098 || ((numpaths = av_top_index((AV *)SvRV(paths))) < 0)) 1099 { 1100 XSRETURN_UNDEF; 1101 } 1102 results = (AV *)sv_2mortal((SV *)newAV()); 1103 CODE: 1104 for (n = 0; n <= numpaths; n++) { 1105 HV * rh; 1106 STRLEN l; 1107 char * fn = SvPV(*av_fetch((AV *)SvRV(paths), n, 0), l); 1108 1109 i = statfs(fn, &buf); 1110 if (i != 0) { 1111 av_push(results, newSVnv(errno)); 1112 continue; 1113 } 1114 1115 rh = (HV *)sv_2mortal((SV *)newHV()); 1116 1117 hv_store(rh, "f_bavail", 8, newSVnv(buf.f_bavail), 0); 1118 hv_store(rh, "f_bfree", 7, newSVnv(buf.f_bfree), 0); 1119 hv_store(rh, "f_blocks", 8, newSVnv(buf.f_blocks), 0); 1120 hv_store(rh, "f_bsize", 7, newSVnv(buf.f_bsize), 0); 1121 hv_store(rh, "f_ffree", 7, newSVnv(buf.f_ffree), 0); 1122 hv_store(rh, "f_files", 7, newSVnv(buf.f_files), 0); 1123 hv_store(rh, "f_type", 6, newSVnv(buf.f_type), 0); 1124 1125 av_push(results, newRV((SV *)rh)); 1126 } 1127 RETVAL = newRV((SV *)results); 1128 OUTPUT: 1129 RETVAL 1130 1131And add the following code to Mytest.t, while incrementing the "11" 1132tests to "13": 1133 1134 $results = Mytest::multi_statfs([ '/', '/blech' ]); 1135 ok( ref $results->[0] ); 1136 ok( ! ref $results->[1] ); 1137 1138=head2 New Things in this Example 1139 1140There are a number of new concepts introduced here, described below: 1141 1142=over 4 1143 1144=item * 1145 1146This function does not use a typemap. Instead, we declare it as accepting 1147one SV* (scalar) parameter, and returning an SV* value, and we take care of 1148populating these scalars within the code. Because we are only returning 1149one value, we don't need a C<PPCODE:> directive - instead, we use C<CODE:> 1150and C<OUTPUT:> directives. 1151 1152=item * 1153 1154When dealing with references, it is important to handle them with caution. 1155The C<INIT:> block first calls SvGETMAGIC(paths), in case 1156paths is a tied variable. Then it checks that C<SvROK> returns 1157true, which indicates that paths is a valid reference. (Simply 1158checking C<SvROK> won't trigger FETCH on a tied variable.) It 1159then verifies that the object referenced by paths is an array, using C<SvRV> 1160to dereference paths, and C<SvTYPE> to discover its type. As an added test, 1161it checks that the array referenced by paths is non-empty, using the C<av_top_index> 1162function (which returns -1 if the array is empty). The XSRETURN_UNDEF macro 1163is used to abort the XSUB and return the undefined value whenever all three of 1164these conditions are not met. 1165 1166=item * 1167 1168We manipulate several arrays in this XSUB. Note that an array is represented 1169internally by an AV* pointer. The functions and macros for manipulating 1170arrays are similar to the functions in Perl: C<av_top_index> returns the highest 1171index in an AV*, much like $#array; C<av_fetch> fetches a single scalar value 1172from an array, given its index; C<av_push> pushes a scalar value onto the 1173end of the array, automatically extending the array as necessary. 1174 1175Specifically, we read pathnames one at a time from the input array, and 1176store the results in an output array (results) in the same order. If 1177statfs fails, the element pushed onto the return array is the value of 1178errno after the failure. If statfs succeeds, though, the value pushed 1179onto the return array is a reference to a hash containing some of the 1180information in the statfs structure. 1181 1182As with the return stack, it would be possible (and a small performance win) 1183to pre-extend the return array before pushing data into it, since we know 1184how many elements we will return: 1185 1186 av_extend(results, numpaths); 1187 1188=item * 1189 1190We are performing only one hash operation in this function, which is storing 1191a new scalar under a key using C<hv_store>. A hash is represented by an HV* 1192pointer. Like arrays, the functions for manipulating hashes from an XSUB 1193mirror the functionality available from Perl. See L<perlguts> and L<perlapi> 1194for details. 1195 1196=item * 1197 1198To create a reference, we use the C<newRV> function. Note that you can 1199cast an AV* or an HV* to type SV* in this case (and many others). This 1200allows you to take references to arrays, hashes and scalars with the same 1201function. Conversely, the C<SvRV> function always returns an SV*, which may 1202need to be cast to the appropriate type if it is something other than a 1203scalar (check with C<SvTYPE>). 1204 1205=item * 1206 1207At this point, xsubpp is doing very little work - the differences between 1208Mytest.xs and Mytest.c are minimal. 1209 1210=back 1211 1212=head2 EXAMPLE 7 (Coming Soon) 1213 1214XPUSH args AND set RETVAL AND assign return value to array 1215 1216=head2 EXAMPLE 8 (Coming Soon) 1217 1218Setting $! 1219 1220=head2 EXAMPLE 9 Passing open files to XSes 1221 1222You would think passing files to an XS is difficult, with all the 1223typeglobs and stuff. Well, it isn't. 1224 1225Suppose that for some strange reason we need a wrapper around the 1226standard C library function C<fputs()>. This is all we need: 1227 1228 #define PERLIO_NOT_STDIO 0 1229 #include "EXTERN.h" 1230 #include "perl.h" 1231 #include "XSUB.h" 1232 1233 #include <stdio.h> 1234 1235 int 1236 fputs(s, stream) 1237 char * s 1238 FILE * stream 1239 1240The real work is done in the standard typemap. 1241 1242B<But> you lose all the fine stuff done by the perlio layers. This 1243calls the stdio function C<fputs()>, which knows nothing about them. 1244 1245The standard typemap offers three variants of PerlIO *: 1246C<InputStream> (T_IN), C<InOutStream> (T_INOUT) and C<OutputStream> 1247(T_OUT). A bare C<PerlIO *> is considered a T_INOUT. If it matters 1248in your code (see below for why it might) #define or typedef 1249one of the specific names and use that as the argument or result 1250type in your XS file. 1251 1252The standard typemap does not contain PerlIO * before perl 5.7, 1253but it has the three stream variants. Using a PerlIO * directly 1254is not backwards compatible unless you provide your own typemap. 1255 1256For streams coming I<from> perl the main difference is that 1257C<OutputStream> will get the output PerlIO * - which may make 1258a difference on a socket. Like in our example... 1259 1260For streams being handed I<to> perl a new file handle is created 1261(i.e. a reference to a new glob) and associated with the PerlIO * 1262provided. If the read/write state of the PerlIO * is not correct then you 1263may get errors or warnings from when the file handle is used. 1264So if you opened the PerlIO * as "w" it should really be an 1265C<OutputStream> if open as "r" it should be an C<InputStream>. 1266 1267Now, suppose you want to use perlio layers in your XS. We'll use the 1268perlio C<PerlIO_puts()> function as an example. 1269 1270In the C part of the XS file (above the first MODULE line) you 1271have 1272 1273 #define OutputStream PerlIO * 1274 or 1275 typedef PerlIO * OutputStream; 1276 1277 1278And this is the XS code: 1279 1280 int 1281 perlioputs(s, stream) 1282 char * s 1283 OutputStream stream 1284 CODE: 1285 RETVAL = PerlIO_puts(stream, s); 1286 OUTPUT: 1287 RETVAL 1288 1289We have to use a C<CODE> section because C<PerlIO_puts()> has the arguments 1290reversed compared to C<fputs()>, and we want to keep the arguments the same. 1291 1292Wanting to explore this thoroughly, we want to use the stdio C<fputs()> 1293on a PerlIO *. This means we have to ask the perlio system for a stdio 1294C<FILE *>: 1295 1296 int 1297 perliofputs(s, stream) 1298 char * s 1299 OutputStream stream 1300 PREINIT: 1301 FILE *fp = PerlIO_findFILE(stream); 1302 CODE: 1303 if (fp != (FILE*) 0) { 1304 RETVAL = fputs(s, fp); 1305 } else { 1306 RETVAL = -1; 1307 } 1308 OUTPUT: 1309 RETVAL 1310 1311Note: C<PerlIO_findFILE()> will search the layers for a stdio 1312layer. If it can't find one, it will call C<PerlIO_exportFILE()> to 1313generate a new stdio C<FILE>. Please only call C<PerlIO_exportFILE()> if 1314you want a I<new> C<FILE>. It will generate one on each call and push a 1315new stdio layer. So don't call it repeatedly on the same 1316file. C<PerlIO_findFILE()> will retrieve the stdio layer once it has been 1317generated by C<PerlIO_exportFILE()>. 1318 1319This applies to the perlio system only. For versions before 5.7, 1320C<PerlIO_exportFILE()> is equivalent to C<PerlIO_findFILE()>. 1321 1322=head2 Troubleshooting these Examples 1323 1324As mentioned at the top of this document, if you are having problems with 1325these example extensions, you might see if any of these help you. 1326 1327=over 4 1328 1329=item * 1330 1331In versions of 5.002 prior to the gamma version, the test script in Example 13321 will not function properly. You need to change the "use lib" line to 1333read: 1334 1335 use lib './blib'; 1336 1337=item * 1338 1339In versions of 5.002 prior to version 5.002b1h, the test.pl file was not 1340automatically created by h2xs. This means that you cannot say "make test" 1341to run the test script. You will need to add the following line before the 1342"use extension" statement: 1343 1344 use lib './blib'; 1345 1346=item * 1347 1348In versions 5.000 and 5.001, instead of using the above line, you will need 1349to use the following line: 1350 1351 BEGIN { unshift(@INC, "./blib") } 1352 1353=item * 1354 1355This document assumes that the executable named "perl" is Perl version 5. 1356Some systems may have installed Perl version 5 as "perl5". 1357 1358=back 1359 1360=head1 See also 1361 1362For more information, consult L<perlguts>, L<perlapi>, L<perlxs>, L<perlmod>, 1363and L<perlpod>. 1364 1365=head1 Author 1366 1367Jeff Okamoto <F<okamoto@corp.hp.com>> 1368 1369Reviewed and assisted by Dean Roehrich, Ilya Zakharevich, Andreas Koenig, 1370and Tim Bunce. 1371 1372PerlIO material contributed by Lupe Christoph, with some clarification 1373by Nick Ing-Simmons. 1374 1375Changes for h2xs as of Perl 5.8.x by Renee Baecker 1376 1377=head2 Last Changed 1378 13792012-01-20 1380