TEAMFLY
Team-Fly
®
Perl: The Complete Reference
Second Edition
This page intentionally left blank.
Perl:
The Complete Reference
Second Edition
Martin C. Brown
Osborne/McGraw-Hill
New York Chicago San Francisco
Lisbon London Madrid Mexico City
Milan New Delhi San Juan
Seoul Singapore Sydney Toronto
Copyright © 2001 by The McGraw-Hill Companies. All rights reserved. Manufactured in the United States of America. Except as per-
mitted under the United States Copyright Act of 1976, no part of this publication may be reproduced or distributed in any form or by
any means, or stored in a database or retrieval system, without the prior written permission of the publisher.
0-07-219425-1
The material in this eBook also appears in the print version of this title: 0-07-212950-6.
All trademarks are trademarks of their respective owners. Rather than put a trademark symbol after every occurrence of a trade-
marked name, we use names in an editorial fashion only, and to the benefit of the trademark owner, with no intention of infringe-
ment of the trademark. Where such designations appear in this book, they have been printed with initial caps.
McGraw-Hill eBooks are available at special quantity discounts to use as premiums and sales promotions, or for use in corporate
training programs. For more information, please contact George Hoare, Special Sales, at or (212)
904-4069.
TERMS OF USE
This is a copyrighted work and The McGraw-Hill Companies, Inc. (“McGraw-Hill”) and its licensors reserve all rights in and to the
work. Use of this work is subject to these terms. Except as permitted under the Copyright Act of 1976 and the right to store and
retrieve one copy of the work, you may not decompile, disassemble, reverse engineer, reproduce, modify, create derivative works
based upon, transmit, distribute, disseminate, sell, publish or sublicense the work or any part of it without McGraw-Hill’s prior con-
sent. You may use the work for your own noncommercial and personal use; any other use of the work is strictly prohibited. Your
right to use the work may be terminated if you fail to comply with these terms.
THE WORK IS PROVIDED “AS IS”. McGRAW-HILL AND ITS LICENSORS MAKE NO GUARANTEES OR WARRANTIES
AS TO THE ACCURACY, ADEQUACY OR COMPLETENESS OF OR RESULTS TO BE OBTAINED FROM USING THE
WORK, INCLUDING ANY INFORMATION THAT CAN BE ACCESSED THROUGH THE WORK VIA HYPERLINK OR
OTHERWISE, AND EXPRESSLY DISCLAIM ANY WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
TO IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. McGraw-Hill and its
licensors do not warrant or guarantee that the functions contained in the work will meet your requirements or that its operation will
be uninterrupted or error free. Neither McGraw-Hill nor its licensors shall be liable to you or anyone else for any inaccuracy, error
or omission, regardless of cause, in the work or for any damages resulting therefrom. McGraw-Hill has no responsibility for the con-
tent of any information accessed through the work. Under no circumstances shall McGraw-Hill and/or its licensors be liable for any
indirect, incidental, special, punitive, consequential or similar damages that result from the use of or inability to use the work, even
if any of them has been advised of the possibility of such damages. This limitation of liability shall apply to any claim or cause what-
soever whether such claim or cause arises in contract, tort or otherwise.
DOI: 10.1036/0072194251
To Darcy and Leon, two little kittens
who do try to help daddy with the typing,
but usually just end up typing
“jjskdjjvoookko000000000000000000000”
About the Author
Martin C. Brown is the author of six Perl
books, including the first edition of Perl: The
Complete Reference, Perl Programmer’s Reference,
ActivePerl Developer’s Guide, and Debugging
Perl. In addition to Perl, he has worked in
Python, Java, Visual Basic, and other languages.
A programmer for 15 years, he is the former
IT director of a large advertising agency
dealing with blue chip clients such as Hewlett
Packard, Oracle, and Cable & Wireless.
Copyright 2001 The McGraw-Hill Companies, Inc. Click Here for Terms of Use.
Contents at a Glance
Part I Fundamentals
1 Perl Backgrounder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Perl Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3 Perl Parsing Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4 Variables and Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5 Statements and Control Structures . . . . . . . . . . . . . . . . . . 109
6 Subroutines, Packages, and Modules . . . . . . . . . . . . . . . . 123
7 Working with Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
8 Data Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
9 Errors and Trapping Them . . . . . . . . . . . . . . . . . . . . . . . . . 269
Part II Programming with Perl
10 Complex Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . 287
11 System Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
12 Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
vii
Copyright 2001 The McGraw-Hill Companies, Inc. Click Here for Terms of Use.
13 Database Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
14 Interprocess Communication . . . . . . . . . . . . . . . . . . . . . . . 447
15 Other Execution Enhancements . . . . . . . . . . . . . . . . . . . . . 479
Part III Developing Applications
16 User Interface Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
17 Advanced User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 529
18 Developing for the World Wide Web (WWW) . . . . . . . . 575
19 Controlling Execution with Pragmas . . . . . . . . . . . . . . . . 611
20 Extending and Embedding Perl . . . . . . . . . . . . . . . . . . . . . 641
Part IV Fine-Tuning Applications
21 Debugging and Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
22 Perl Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
23 Perl Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
24 Cross-Platform Migration Traps . . . . . . . . . . . . . . . . . . . . 825
25 Distributing Modules and Applications . . . . . . . . . . . . . . 837
Part V Appendixes
A Function Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
B Standard Perl Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
C Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
viii
Perl: The Complete Reference
Contents
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiii
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxv
Part I
Fundamentals
1 Perl Backgrounder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Versions and Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Perl, perl or PeRl? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Life Before Perl 5.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Perl History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Main Perl Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Perl Is Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Perl Is Simple to Learn, Concise, and Easy to Read . . . . . . 7
Perl Is Fast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Perl Is Extensible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Perl Has Flexible Data Types . . . . . . . . . . . . . . . . . . . . . . . . . 8
Perl Is Object Oriented . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Perl Is Collaborative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Compiler or Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
ix
Copyright 2001 The McGraw-Hill Companies, Inc. Click Here for Terms of Use.
Similar Programming Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Unix Shells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
awk/gawk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Popular “Mythconceptions” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
It’s Only for the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
It’s Not Maintenance Friendly . . . . . . . . . . . . . . . . . . . . . . . . 13
It’s Only for Hackers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
It’s a Scripting Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
There’s No Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
All Perl Programs Are Free . . . . . . . . . . . . . . . . . . . . . . . . . . 14
There’s No Development Environment . . . . . . . . . . . . . . . . 14
Perl Is a GNU Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Perl Is Difficult to Learn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Perl Success Stories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 Perl Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Installing and Using Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Writing a Perl Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Perl Under Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Perl Under Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Perl Under Mac OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Perl Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Subroutines (Functions) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Where Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3 Perl Parsing Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
The Execution Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Syntax and Parsing Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Basic Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Component Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Operators and Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Bare Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Logical Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Perl Coding Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
x
Perl: The Complete Reference
TEAMFLY
Team-Fly
®
4 Variables and Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Basic Naming Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Scalar Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Numeric Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
String Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Interpolation of Array Values . . . . . . . . . . . . . . . . . . . . . . . . 81
Here Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Typeglobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
The defined Function and the Undefined Value . . . . . . . . . . . . . . . . 97
Default Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Other Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Special Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5 Statements and Control Structures . . . . . . . . . . . . . . . . . 109
Code Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
while Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
until Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
for Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
foreach Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
The continue Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Loop Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Unqualified Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6 Subroutines, Packages, and Modules . . . . . . . . . . . . . . . 123
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Return Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Error Notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Prototypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Package Symbol Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Contents
xi
Special Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Creating Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
The Exporter Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Comparing use and require . . . . . . . . . . . . . . . . . . . . . . . . . . 150
no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Effects of my . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Effects of local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Effects of our . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Scope Within Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Autoloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7 Working with Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Opening and Closing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Reading and Writing Filehandles . . . . . . . . . . . . . . . . . . . . . 172
Locating Your Position Within a File . . . . . . . . . . . . . . . . . . 181
Miscellaneous Control Functions . . . . . . . . . . . . . . . . . . . . . 183
File Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
File Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Basic File Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Accessing Directory Entries . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Managing Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
File Control with fcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
I/O Control with ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
File Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
8 Data Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Working with Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
abs—the Absolute Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
int—Converting Floating Points to Integers . . . . . . . . . . . . 211
exp—Raising e to the Power . . . . . . . . . . . . . . . . . . . . . . . . . 211
sqrt—the Square Root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
log—the Logarithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Trigonometric Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Conversion Between Bases . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Conversion Between Characters and Numbers . . . . . . . . . 214
Random Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
Working with Very Small Integers . . . . . . . . . . . . . . . . . . . . 216
xii
Perl: The Complete Reference
Working with Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
String Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
String Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Case Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
End-of-Line Character Removal . . . . . . . . . . . . . . . . . . . . . . 219
String Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Extracting Substrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Splicing Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Pattern Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
The Match Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
The Substitution Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Regular Expression Elements . . . . . . . . . . . . . . . . . . . . . . . . 242
Regular Expression Variables . . . . . . . . . . . . . . . . . . . . . . . . 258
Regular Expression Extensions/Assertions . . . . . . . . . . . . 259
Precompiling Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Regular Expression Support Functions . . . . . . . . . . . . . . . . 263
Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Perl’s Interpretation of Unicode . . . . . . . . . . . . . . . . . . . . . . 266
Unicode Characters in Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Unicode’s Effects on Perl Code . . . . . . . . . . . . . . . . . . . . . . . 267
9 Errors and Trapping Them . . . . . . . . . . . . . . . . . . . . . . . . 269
Adding Error Checking to Your Scripts . . . . . . . . . . . . . . . . . . . . . . . 270
Error Checking Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Error Checking Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
What to Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
What Not to Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
When to Stop Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Don’t Check Things Twice . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Functions, Return Values, and Nesting . . . . . . . . . . . . . . . . 276
Error Messages and Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Reporting Errors Within Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
The Warn Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
The Die Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Directives and Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Contents
xiii
Reporting Errors Within Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
The Carp Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
The Cluck Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
The Croak Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
The Confess Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Part II
Programming with Perl
10 Complex Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . 287
Accessing Packed Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Creating Hard References . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
Dereferencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Determining a Reference Type . . . . . . . . . . . . . . . . . . . . . . . 301
Symbolic References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Complex Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Arrays of Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Hashes of Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Arrays of Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Hashes of Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Beyond Two Dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Object Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Creating and Using Objects . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Classes and Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Destructors and Garbage Collection . . . . . . . . . . . . . . . . . . . 330
Comparing Perl Objects to Other Languages . . . . . . . . . . . 330
Using tie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Creating New tie Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
11 System Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Users and Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Getting Unix Password Entries . . . . . . . . . . . . . . . . . . . . . . . 341
Getting Unix Group Entries . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Password Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
gmtime and localtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
time Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Comparing Time Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Converting Dates and Times into Epochs . . . . . . . . . . . . . . 348
xiv
Perl: The Complete Reference
Time Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
times Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
sleep Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Alarms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
12 Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Obtaining Network Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Hosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
The Socket Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
Address Resolution and Conversion . . . . . . . . . . . . . . . . . . 369
Address Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Socket Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Line Termination Constants . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Socket Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
Connecting to a Remote Socket . . . . . . . . . . . . . . . . . . . . . . . 371
Listening for Socket Connections . . . . . . . . . . . . . . . . . . . . . 374
Using IO::Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Client Side . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Server Side . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Using IO::Socket and IO::Select . . . . . . . . . . . . . . . . . . . . . . . 382
Getting Socket Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Closing Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Socket Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Data Transfer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Graham Barr’s libnet Bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
Gisle Aas’ LWP Bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
13 Database Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Text Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Delimited Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Fixed-Length Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
DBM Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
DBM Implementations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
DBM Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
Using Tied DBM Databases . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Converting Between DBM Formats . . . . . . . . . . . . . . . . . . . 406
Using AnyDBM_File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
GDBM Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
Contents
xv
Berkeley DB Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Storing Complex Data in a DBM Database . . . . . . . . . . . . . 418
Relational Databases with DBM . . . . . . . . . . . . . . . . . . . . . . 421
Database File Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Using the DBI and Win32::ODBC Toolkits . . . . . . . . . . . . . . . . . . . . 425
DBI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
Win32::ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Database Mechanics and Compatibility . . . . . . . . . . . . . . . . 427
Connecting to a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Executing Simple Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
Executing Extended Queries . . . . . . . . . . . . . . . . . . . . . . . . . 431
Closing the Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
Identifying Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Doing More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
SQL Refresher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
SQL Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
14 Interprocess Communication . . . . . . . . . . . . . . . . . . . . . . 447
Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Controlling Perl Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Process Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Process Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
Process Priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Signal Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
The __WARN__ and __DIE__ Signals . . . . . . . . . . . . . . . . . 455
Sending Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Anonymous Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
Two-Way Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Named Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
Named Pipes Under Windows . . . . . . . . . . . . . . . . . . . . . . . 463
Safe Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Executing Additional Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Running Other Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Replacing the Current Script . . . . . . . . . . . . . . . . . . . . . . . . . 470
Creating Child Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Other Function Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
System V IPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
15 Other Execution Enhancements . . . . . . . . . . . . . . . . . . . . 479
Perl on the Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Special Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
xvi
Perl: The Complete Reference
Perl Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
Perl in Perl (eval) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Using eval EXPR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Using eval BLOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Trapping Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Returning Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
eval and the __DIE__ signal handler . . . . . . . . . . . . . . . . . . 494
Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
How Multitasking Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494
From Multitasking to Multithreading . . . . . . . . . . . . . . . . . 495
Comparing Threads to Multiple Processes . . . . . . . . . . . . . 497
Comparing Threads to select() . . . . . . . . . . . . . . . . . . . . . . . . 498
Threads and Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Creating a New Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Creating a Thread Using an Anonymous Subroutine . . . . 499
Controlling a Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Controlling Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
Controlling Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
Using Taint Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505
The Safe and Opcode Modules . . . . . . . . . . . . . . . . . . . . . . . 508
Part III
Developing Applications
16 User Interface Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
Processing Command Line Arguments . . . . . . . . . . . . . . . . . . . . . . . 514
Getopt::Std . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
Getopt::Long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Perl’s Reporting Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
Headers and Footers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
Format Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526
Format Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
17 Advanced User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . 529
Working with a Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Using Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
Installing Tk Under Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
Installing Tk Under Windows . . . . . . . . . . . . . . . . . . . . . . . . 533
Hello from Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
Contents
xvii
Event Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
Controlling Window Geometry . . . . . . . . . . . . . . . . . . . . . . 563
Easing the Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
18 Developing for the World Wide Web (WWW) . . . . . . . 575
HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
Uniform Resource Locators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
Web Operation Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
The Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
The Common Gateway Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Extracting Form Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586
Sending Information Back to the Browser . . . . . . . . . . . . . . 589
Document Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Smarter Web Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
The CGI Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598
Parsing HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601
Parsing XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602
Debugging and Testing CGI Applications . . . . . . . . . . . . . . . . . . . . . 605
Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
19 Controlling Execution with Pragmas . . . . . . . . . . . . . . . 611
Warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
The $^W Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
The Old warnings Pragma . . . . . . . . . . . . . . . . . . . . . . . . . . . 614
Lexical Warnings in Perl 5.6 . . . . . . . . . . . . . . . . . . . . . . . . . . 615
The strict Pragma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
The vars Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
The refs Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
The subs Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
Other Perl Pragmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625
autouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
blib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
charnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
xviii
Perl: The Complete Reference
filetest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
less . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
lib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
ops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
overload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
re . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
sigtrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
subs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639
vars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
20 Extending and Embedding Perl . . . . . . . . . . . . . . . . . . . . 641
Perl Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
Internal Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
Translator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
Opcodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
Perl’s Internal Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
The Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
Stack Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
Internals Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Extending Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
The Extension Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
XS Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
SWIG Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
Using XS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
Embedding Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
Embedding the Perl Interpreter . . . . . . . . . . . . . . . . . . . . . . . 699
Using a Specific Perl Function . . . . . . . . . . . . . . . . . . . . . . . . 700
Multiplicity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
XS Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
Cooperating with Other Languages . . . . . . . . . . . . . . . . . . . . . . . . . . 706
Converting Other Languages to Perl . . . . . . . . . . . . . . . . . . 706
Converting Perl to Other Languages . . . . . . . . . . . . . . . . . . 711
Calling Other Languages from Perl . . . . . . . . . . . . . . . . . . . 712
Contents
xix
Part IV
Fine-Tuning Applications
21 Debugging and Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
Debugging Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
Using print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
Using caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
Using eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
Writing a Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
Reporting to syslog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
Reporting to the Windows NT/2000 Event Log . . . . . . . . . 729
Using a Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
Watches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
Stepping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
Breakpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
The Perl Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
The ActivePerl Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748
Traps for Programmers of Other Languages . . . . . . . . . . . . . . . . . . . 750
Differences from awk/gawk . . . . . . . . . . . . . . . . . . . . . . . . . 750
C Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752
sed Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
emacs Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
Shell Script Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
Python Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757
The Perl Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
Profiling by Hand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765
Optimization Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
22 Perl Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773
Using dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775
Using the Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776
The Backends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777
The perlcc Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791
Differences Between Interpreted and Compiled Code . . . 795
Comparing Script and Executable Speeds . . . . . . . . . . . . . . . . . . . . . 795
Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797
Summary Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800
23 Perl Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803
Using the Supplied Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . 805
Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810
Mac OS/Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
xx
Perl: The Complete Reference
TEAMFLY
Team-Fly
®
Writing POD Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812
POD Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
Command Paragraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813
Ordinary Text Paragraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
Verbatim Paragraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
Escape Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
Embedding Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . 816
Converting POD to Other Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . 818
Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819
HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
Unix man Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
PostScript/PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
Converting POD to HTML On The Fly . . . . . . . . . . . . . . . . 823
24 Cross-Platform Migration Traps . . . . . . . . . . . . . . . . . . . 825
Function Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
Constant Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Execution Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
Line Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
Character Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Data Differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Files and Pathnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829
Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Performance and Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830
Platform Migration Tricks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
Determining Your Platform . . . . . . . . . . . . . . . . . . . . . . . . . . 831
Determining the Perl Version . . . . . . . . . . . . . . . . . . . . . . . . 832
Checking for Supported Functions . . . . . . . . . . . . . . . . . . . . 833
Function Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
25 Distributing Modules and Applications . . . . . . . . . . . . . 837
Perl Makefiles and ExtUtils::MakeMaker . . . . . . . . . . . . . . . . . . . . . . 838
Perl Makefiles and CPAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
Perl Makefiles and PPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839
Extension Building and Installation Overview . . . . . . . . . . 840
MakeMaker Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842
Start with h2xs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
MakeMaker Configurable Options . . . . . . . . . . . . . . . . . . . . 845
Creating a Dummy Makefile . . . . . . . . . . . . . . . . . . . . . . . . . 853
Default Makefile Targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
Creating a New Perl Binary . . . . . . . . . . . . . . . . . . . . . . . . . . 854
Targets for Package Builders . . . . . . . . . . . . . . . . . . . . . . . . . 855
Related Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
Contents
xxi
MakeMaker Tricks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
Checking for Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
Packing for CPAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863
Packing for PPM/VPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863
Part V
Appendixes
A Function Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
-X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879
abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
accept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
alarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
atan2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
bind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
binmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
bless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883
caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
chdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
chmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
chomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
chop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
chown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
chr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
chroot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
closedir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
crypt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
dbmclose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
dbmopen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
defined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892
die . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893
dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894
each . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
endgrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
endhostent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895
endnetent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896
endprotoent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896
xxii
Perl: The Complete Reference
endpwent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
endservent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
eof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898
exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
exists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
fcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
fileno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
flock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902
fork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903
formline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
getc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
getgrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904
getgrgid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905
getgrnam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906
gethostbyaddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906
gethostbyname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907
gethostent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907
getlogin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
getnetbyaddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908
getnetbyname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
getnetent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
getpeername . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
getpgrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
getppid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911
getpriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911
getprotobyname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911
getprotobynumber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912
getprotoent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912
getpwent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913
getpwnam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
getpwuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914
getservbyname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
getservbyport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915
getservent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
getsockname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916
getsockopt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917
glob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
gmtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918
goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
Contents
xxiii
grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
hex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920
import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921
int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922
keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923
kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923
last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925
lc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925
lcfirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925
length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926
listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927
local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927
localtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928
log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928
lstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
m// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929
mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
msgctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
msgget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931
msgrcv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931
msgsnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
my . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932
next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933
oct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934
opendir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
ord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
our . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937
pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938
package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
pop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
pos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942
printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942
prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945
push . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945
xxiv
Perl: The Complete Reference