Table of Contents
preface xiii
acknowledgments xv
about this book xvi
author online xix
about the cover illustration xx
- 1 C for Perl programmers 1
- 1.1 Hello, world 1
- 1.2 The C compiler 2
- 1.3 Header files 3
- 1.4 The main function 4
- 1.5 Variables and functions 6
- Function parameters 6, Automatic variables 7, Global variables 8, Static variables 9
- 1.6 Data types 10
- C types 11, Types defined in Perl 15
- 1.7 Casting 16
- 1.8 Control constructs 17
- Statements and blocks 17, The break and continue statements 18, The switch statement 19
- 1.9 Macros and the C preprocessor 20
- 1.10 Library functions 23
- 1.11 Summary 23
- 2 Extending Perl: an introduction 24
- 2.1 Perl modules 24
- Module distributions 26
- 2.2 Interfacing to another language: C from XS 30
- The Perl module 30, The XS file 31, Example: ?Hello, world? 32, Return values 36, Arguments and return values 37
- 2.3 XS and C: taking things further 38
- Modifying input variables 38, Output arguments 39, Compiler constants 40
- 2.4 What about Makefile.PL? 44
- It really is a Perl program 47
- 2.5 Interface design: part 1 47
- Status and multiple return arguments 48, Don?t supply what is already known 48, Don?t export everything 49, Use namespaces 49, Use double precision 49
- 2.6 Further reading 50
- 2.7 Summary 50
- 3 Advanced C 51
- 3.1 Arrays 51
- 3.2 Pointers 53
- Pointers and arrays 55, Pointers to functions 57
- 3.3 Strings 58
- Arrays of strings 59
- 3.4 Structures 60
- 3.5 File I/O 62
- 3.6 Memory management 63
- Allocating memory at runtime 64, Altering the size of memory 65, Manipulating memory 65, Memory manipulation and Perl 67
- 3.7 C Traps for the Perl programmer 68
- 3.8 Further reading 69
- 3.9 Summary 69
- 4 Perl?s variable types 70
- 4.1 General concepts 70
- Reference counting 71, Looking inside: Devel::Peek 71, The flag system 72
- 4.2 Scalar variables 74
- The SvNULL type 74, SvRV: references 76, SvPV: string values 76, SvPVIV: integers 78, SvPVNV: floating-point numbers 79, SvIV and SvNV 80, SvOOK: offset strings 80
- 4.3 Magic variables: SvPVMG 81
- 4.4 Array variables 85
- 4.5 Hashes 87
- 4.6 Globs 91
- 4.7 Namespaces and stashes 94
- 4.8 Lexical ?my? variables 95
- 4.9 Code blocks 96
- Important CV flags 97
- 4.10 Further reading 99
- 4.11 Summary 99
- 5 The Perl 5 API 100
- 5.1 Sample entry 101
- 5.2 SV functions 101
- Special SVs 101, Creating SVs 103, Accessing data 110, Manipulating data 119, String functions 124, References 129
- 5.3 AV functions 132
- Creation and destruction 132, Manipulating elements 136, Testing and changing array size 142
- 5.4 HV functions 144
- Creation and destruction 144, Manipulating elements 146
- 5.5 Miscellaneous functions 150
- Memory management 150, Unicode data handling 155, Everything else 158
- 5.6 Summary 162
- 6 Advanced XS programming 163
- 6.1 Pointers and things 164
- 6.2 Filehandles 166
- 6.3 Typemaps 167
- 6.4 The argument stack 169
- 6.5 C structures 170
- C structures as black boxes 170, C structures as objects 176, C structures as hashes 179
- 6.6 Arrays 183
- Passing numeric arrays from Perl to C 183, Passing numeric arrays from C to Perl 190, The Perl Data Language 192, Benchmarks 198, Character strings 199
- 6.7 Callbacks 202
- Immediate callbacks 203, Deferred callbacks 206, Multiple callbacks 207
- 6.8 Other languages 209
- Linking Perl to C++ 209, Linking Perl to Fortran 216, Linking Perl to Java 223
- 6.9 Interface design: part 2 223
- 6.10 Older Perls 224
- 6.11 What?s really going on? 225
- What does xsubpp generate? 226
- 6.12 Further reading 230
- 6.13 Summary 230
- 7 Alternatives to XS 231
- 7.1 The h2xs program 232
- 7.2 SWIG 233
- Data structures 236
- 7.3 The Inline module 238
- What is going on? 239, Additional Inline examples 240, Inline and CPAN 245, Inline module summary 246
- 7.4 The PDL::PP module 247
- The .pd file 248, The Makefile.PL file 249, Pure PDL 251
- 7.5 Earlier alternatives 251
- 7.6 Further reading 252
- 7.7 Summary 253
- 8 Embedding Perl in C 254
- 8.1 When to embed 254
- 8.2 When not to embed 255
- 8.3 Things to think about 255
- 8.4 ?Hello C? from Perl 255
- Compiling embedded programs 257
- 8.5 Passing data 257
- 8.6 Calling Perl routines 259
- Stack manipulation 261, Context 263, Trapping errors with eval 263, Calling Perl methods in C 264, Calling Perl statements 265
- 8.7 Using C in Perl in C 265
- 8.8 Embedding wisdom 266
- 8.9 Summary 267
- 9 Embedding case study 268
- 9.1 Goals 268
- 9.2 Preparing the ground 269
- 9.3 Configuration options 270
- 9.4 Testing options 273
- Binary options 273, Quad-state options 274, String options 275
- 9.5 Summary 276
- 10 Introduction to Perl internals 277
- 10.1 The source tree 277
- The Perl library 277, The XS library 278, The I/O subsystem 278, The Regexp engine 278, The parser and tokenizer 278, Variable handling 279, Runtime execution 279
- 10.2 The parser 279
- BNF and parsing 279, Parse actions and token values 281, Parsing some Perl 281
- 10.3 The tokenizer 282
- Basic tokenizing 282, Sublexing 284, Tokenizer summary 285
- 10.4 Op code trees 285
- The basic op 285, The different operations 286, Different flavors of ops 286, Tying it all together 288, PP Code 290, The opcode table and opcodes.pl 293, Scratchpads and targets 293, The optimizer 294, Op code trees summary 294
- 10.5 Execution 295
- 10.6 The Perl compiler 295
- What is the Perl compiler? 296, B:: modules 296, What B and O provide 299, Using B for simple tasks 300
- 10.7 Further reading 303
- 10.8 Summary 303
- 11 Hacking Perl 304
- 11.1 The development process 304
- Perl versioning 304, The development tracks 305, The perl5-porters mailing list 305, Pumpkins and pumpkings 305, The Perl repository 306
- 11.2 Debugging aids 306
- Debugging modules 307, The built-in debugger: perl -D 307, Debugging functions 310, External debuggers 310
- 11.3 Creating a patch 317
- How to solve problems 317, Autogenerated files 318, The patch itself 319, Documentation 320, Testing 320, Submitting your patch 320
- 11.4 Perl 6: the future of Perl 321
- A history 321, Design and implementation 322, What happens next 323, The future for Perl 5 323
- 11.5 Further reading 323
- 11.6 Summary 323
A: Perl?s typemaps 324
B: Further reading 348
C: Perl API index 350
index 355