perl: the complete reference
TRANSCRIPT
-
TEAMFLY
Team-Fly
-
Perl: The Complete ReferenceSecond Edition
-
This page intentionally left blank.
-
Perl:The Complete Reference
Second Edition
Martin C. Brown
Osborne/McGraw-HillNew York Chicago San Francisco
Lisbon London Madrid Mexico CityMilan 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 byany 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 corporatetraining programs. For more information, please contact George Hoare, Special Sales, at [email protected] or (212)904-4069.
TERMS OF USEThis is a copyrighted work and The McGraw-Hill Companies, Inc. (McGraw-Hill) and its licensors reserve all rights in and to thework. Use of this work is subject to these terms. Except as permitted under the Copyright Act of 1976 and the right to store andretrieve one copy of the work, you may not decompile, disassemble, reverse engineer, reproduce, modify, create derivative worksbased upon, transmit, distribute, disseminate, sell, publish or sublicense the work or any part of it without McGraw-Hills prior con-sent. You may use the work for your own noncommercial and personal use; any other use of the work is strictly prohibited. Yourright 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 WARRANTIESAS TO THE ACCURACY, ADEQUACY OR COMPLETENESS OF OR RESULTS TO BE OBTAINED FROM USING THEWORK, INCLUDING ANY INFORMATION THAT CAN BE ACCESSED THROUGH THE WORK VIA HYPERLINK OROTHERWISE, AND EXPRESSLY DISCLAIM ANY WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITEDTO IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. McGraw-Hill and itslicensors do not warrant or guarantee that the functions contained in the work will meet your requirements or that its operation willbe uninterrupted or error free. Neither McGraw-Hill nor its licensors shall be liable to you or anyone else for any inaccuracy, erroror 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 anyindirect, incidental, special, punitive, consequential or similar damages that result from the use of or inability to use the work, evenif 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 kittenswho do try to help daddy with the typing,
but usually just end up typingjjskdjjvoookko000000000000000000000
-
About the AuthorMartin C. Brown is the author of six Perlbooks, including the first edition of Perl: TheComplete Reference, Perl Programmers Reference,ActivePerl Developers Guide, and DebuggingPerl. In addition to Perl, he has worked inPython, Java, Visual Basic, and other languages.A programmer for 15 years, he is the formerIT director of a large advertising agencydealing with blue chip clients such as HewlettPackard, Oracle, and Cable & Wireless.
Copyright 2001 The McGraw-Hill Companies, Inc. Click Here for Terms of Use.
-
Contents at a GlancePart I Fundamentals
1 Perl Backgrounder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Perl Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Perl Parsing Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 Variables and Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735 Statements and Control Structures . . . . . . . . . . . . . . . . . . 1096 Subroutines, Packages, and Modules . . . . . . . . . . . . . . . . 1237 Working with Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1618 Data Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2099 Errors and Trapping Them . . . . . . . . . . . . . . . . . . . . . . . . . 269
Part II Programming with Perl
10 Complex Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . 28711 System Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33912 Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
viiCopyright 2001 The McGraw-Hill Companies, Inc. Click Here for Terms of Use.
-
13 Database Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39114 Interprocess Communication . . . . . . . . . . . . . . . . . . . . . . . 44715 Other Execution Enhancements . . . . . . . . . . . . . . . . . . . . . 479
Part III Developing Applications
16 User Interface Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51317 Advanced User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . 52918 Developing for the World Wide Web (WWW) . . . . . . . . 57519 Controlling Execution with Pragmas . . . . . . . . . . . . . . . . 61120 Extending and Embedding Perl . . . . . . . . . . . . . . . . . . . . . 641
Part IV Fine-Tuning Applications
21 Debugging and Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71522 Perl Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77323 Perl Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80324 Cross-Platform Migration Traps . . . . . . . . . . . . . . . . . . . . 82525 Distributing Modules and Applications . . . . . . . . . . . . . . 837
Part V Appendixes
A Function Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869B Standard Perl Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993C Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1141
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1153
viii P e r l : T h e C o m p l e t e R e f e r e n c e
-
ContentsAcknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxiiiIntroduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxv
Part I
Fundamentals
1 Perl Backgrounder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3Versions and Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Perl, perl or PeRl? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Life Before Perl 5.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Perl History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Main Perl Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Perl Is Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Perl Is Simple to Learn, Concise, and Easy to Read . . . . . . 7Perl Is Fast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Perl Is Extensible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Perl Has Flexible Data Types . . . . . . . . . . . . . . . . . . . . . . . . . 8Perl Is Object Oriented . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Perl Is Collaborative . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Compiler or Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
ixCopyright 2001 The McGraw-Hill Companies, Inc. Click Here for Terms of Use.
-
Similar Programming Languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Unix Shells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12awk/gawk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Popular Mythconceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Its Only for the Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Its Not Maintenance Friendly . . . . . . . . . . . . . . . . . . . . . . . . 13Its Only for Hackers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Its a Scripting Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Theres No Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14All Perl Programs Are Free . . . . . . . . . . . . . . . . . . . . . . . . . . 14Theres No Development Environment . . . . . . . . . . . . . . . . 14Perl Is a GNU Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Perl Is Difficult to Learn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Perl Success Stories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 Perl Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17Installing and Using Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Writing a Perl Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Perl Under Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Perl Under Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Perl Under Mac OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Perl Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Subroutines (Functions) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Where Next? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3 Perl Parsing Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37The Execution Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Syntax and Parsing Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Basic Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Component Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43Operators and Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Bare Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Logical Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Perl Coding Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
x P e r l : T h e C o m p l e t e R e f e r e n c e
TEAMFLY
Team-Fly
-
4 Variables and Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Basic Naming Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74Scalar Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Numeric Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76String Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Quotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Interpolation of Array Values . . . . . . . . . . . . . . . . . . . . . . . . 81Here Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94Typeglobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96The defined Function and the Undefined Value . . . . . . . . . . . . . . . . 97Default Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98Other Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98Special Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
5 Statements and Control Structures . . . . . . . . . . . . . . . . . 109Code Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
while Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114until Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115for Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115foreach Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116The continue Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Loop Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Unqualified Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
6 Subroutines, Packages, and Modules . . . . . . . . . . . . . . . 123Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127Return Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137Error Notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139Prototypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Package Symbol Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
C o n t e n t s xi
-
Special Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Creating Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148The Exporter Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149Comparing use and require . . . . . . . . . . . . . . . . . . . . . . . . . . 150no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154Effects of my . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155Effects of local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156Effects of our . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Scope Within Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Autoloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
7 Working with Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Opening and Closing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . 164Reading and Writing Filehandles . . . . . . . . . . . . . . . . . . . . . 172Locating Your Position Within a File . . . . . . . . . . . . . . . . . . 181Miscellaneous Control Functions . . . . . . . . . . . . . . . . . . . . . 183
File Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186File Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187Basic File Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192Accessing Directory Entries . . . . . . . . . . . . . . . . . . . . . . . . . . 196Managing Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198File Control with fcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200I/O Control with ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203File Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
8 Data Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209Working with Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
absthe Absolute Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210intConverting Floating Points to Integers . . . . . . . . . . . . 211expRaising e to the Power . . . . . . . . . . . . . . . . . . . . . . . . . 211sqrtthe Square Root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211logthe Logarithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212Trigonometric Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212Conversion Between Bases . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Conversion Between Characters and Numbers . . . . . . . . . 214Random Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214Working with Very Small Integers . . . . . . . . . . . . . . . . . . . . 216
xii P e r l : T h e C o m p l e t e R e f e r e n c e
-
Working with Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217String Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217String Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Case Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218End-of-Line Character Removal . . . . . . . . . . . . . . . . . . . . . . 219String Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219Extracting Substrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220Stacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221Splicing Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231Pattern Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232The Match Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233The Substitution Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . 236Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240Regular Expression Elements . . . . . . . . . . . . . . . . . . . . . . . . 242Regular Expression Variables . . . . . . . . . . . . . . . . . . . . . . . . 258Regular Expression Extensions/Assertions . . . . . . . . . . . . 259Precompiling Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . 261Regular Expression Support Functions . . . . . . . . . . . . . . . . 263
Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265Perls Interpretation of Unicode . . . . . . . . . . . . . . . . . . . . . . 266Unicode Characters in Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . 266Unicodes Effects on Perl Code . . . . . . . . . . . . . . . . . . . . . . . 267
9 Errors and Trapping Them . . . . . . . . . . . . . . . . . . . . . . . . 269Adding Error Checking to Your Scripts . . . . . . . . . . . . . . . . . . . . . . . 270
Error Checking Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270Error Checking Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
What to Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273What Not to Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274When to Stop Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
Dont Check Things Twice . . . . . . . . . . . . . . . . . . . . . . . . . . . 275Functions, Return Values, and Nesting . . . . . . . . . . . . . . . . 276
Error Messages and Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277Reporting Errors Within Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
The Warn Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279The Die Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280Directives and Tokens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
C o n t e n t s xiii
-
Reporting Errors Within Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281The Carp Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282The Cluck Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283The Croak Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283The Confess Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
Part II
Programming with Perl
10 Complex Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . 287Accessing Packed Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . 288References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Creating Hard References . . . . . . . . . . . . . . . . . . . . . . . . . . . 294Dereferencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298Determining a Reference Type . . . . . . . . . . . . . . . . . . . . . . . 301Symbolic References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Complex Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303Arrays of Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304Hashes of Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309Arrays of Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313Hashes of Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315Beyond Two Dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321Object Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321Creating and Using Objects . . . . . . . . . . . . . . . . . . . . . . . . . . 322Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325Classes and Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329Destructors and Garbage Collection . . . . . . . . . . . . . . . . . . . 330Comparing Perl Objects to Other Languages . . . . . . . . . . . 330
Using tie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331Creating New tie Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
11 System Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Users and Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Getting Unix Password Entries . . . . . . . . . . . . . . . . . . . . . . . 341Getting Unix Group Entries . . . . . . . . . . . . . . . . . . . . . . . . . . 343Password Encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345gmtime and localtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345time Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347Comparing Time Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347Converting Dates and Times into Epochs . . . . . . . . . . . . . . 348
xiv P e r l : T h e C o m p l e t e R e f e r e n c e
-
Time Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348times Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351sleep Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352Alarms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
12 Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361Obtaining Network Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
Hosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
The Socket Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368Address Resolution and Conversion . . . . . . . . . . . . . . . . . . 369Address Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369Socket Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370Line Termination Constants . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Socket Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371Connecting to a Remote Socket . . . . . . . . . . . . . . . . . . . . . . . 371Listening for Socket Connections . . . . . . . . . . . . . . . . . . . . . 374
Using IO::Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380Client Side . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381Server Side . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381Using IO::Socket and IO::Select . . . . . . . . . . . . . . . . . . . . . . . 382Getting Socket Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383Closing Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384Socket Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384Data Transfer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Graham Barrs libnet Bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387Gisle Aas LWP Bundle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
13 Database Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391Text Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
Delimited Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395Fixed-Length Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
DBM Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399DBM Implementations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400DBM Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402Using Tied DBM Databases . . . . . . . . . . . . . . . . . . . . . . . . . . 403Converting Between DBM Formats . . . . . . . . . . . . . . . . . . . 406Using AnyDBM_File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407GDBM Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
C o n t e n t s xv
-
Berkeley DB Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409Storing Complex Data in a DBM Database . . . . . . . . . . . . . 418Relational Databases with DBM . . . . . . . . . . . . . . . . . . . . . . 421
Database File Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424Using the DBI and Win32::ODBC Toolkits . . . . . . . . . . . . . . . . . . . . 425
DBI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425Win32::ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426Database Mechanics and Compatibility . . . . . . . . . . . . . . . . 427Connecting to a Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428Executing Simple Queries . . . . . . . . . . . . . . . . . . . . . . . . . . . 430Executing Extended Queries . . . . . . . . . . . . . . . . . . . . . . . . . 431Closing the Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432Identifying Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433Doing More . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
SQL Refresher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434SQL Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
14 Interprocess Communication . . . . . . . . . . . . . . . . . . . . . . 447Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
Controlling Perl Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . 449Process Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449Process Groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449Process Priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451Signal Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453The __WARN__ and __DIE__ Signals . . . . . . . . . . . . . . . . . 455Sending Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459Anonymous Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459Two-Way Communication . . . . . . . . . . . . . . . . . . . . . . . . . . . 460Named Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461Named Pipes Under Windows . . . . . . . . . . . . . . . . . . . . . . . 463Safe Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Executing Additional Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468Running Other Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468Replacing the Current Script . . . . . . . . . . . . . . . . . . . . . . . . . 470Creating Child Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Other Function Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477System V IPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478
15 Other Execution Enhancements . . . . . . . . . . . . . . . . . . . . 479Perl on the Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Special Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489
xvi P e r l : T h e C o m p l e t e R e f e r e n c e
-
Perl Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489Perl in Perl (eval) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Using eval EXPR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492Using eval BLOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492Trapping Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493Returning Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493eval and the __DIE__ signal handler . . . . . . . . . . . . . . . . . . 494
Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494How Multitasking Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494From Multitasking to Multithreading . . . . . . . . . . . . . . . . . 495Comparing Threads to Multiple Processes . . . . . . . . . . . . . 497Comparing Threads to select() . . . . . . . . . . . . . . . . . . . . . . . . 498Threads and Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498Creating a New Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498Creating a Thread Using an Anonymous Subroutine . . . . 499Controlling a Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500Controlling Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501Controlling Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502Queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505Using Taint Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505The Safe and Opcode Modules . . . . . . . . . . . . . . . . . . . . . . . 508
Part III
Developing Applications
16 User Interface Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513Processing Command Line Arguments . . . . . . . . . . . . . . . . . . . . . . . 514
Getopt::Std . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515Getopt::Long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Perls Reporting Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521Headers and Footers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525Format Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526Format Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527
17 Advanced User Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . 529Working with a Terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531Using Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532
Installing Tk Under Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533Installing Tk Under Windows . . . . . . . . . . . . . . . . . . . . . . . . 533Hello from Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
C o n t e n t s xvii
-
Event Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540Controlling Window Geometry . . . . . . . . . . . . . . . . . . . . . . 563Easing the Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
18 Developing for the World Wide Web (WWW) . . . . . . . 575HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576Uniform Resource Locators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578Web Operation Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579The Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580The Common Gateway Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Extracting Form Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586Sending Information Back to the Browser . . . . . . . . . . . . . . 589Document Body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Smarter Web Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593The CGI Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598Parsing HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601Parsing XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602Debugging and Testing CGI Applications . . . . . . . . . . . . . . . . . . . . . 605Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
19 Controlling Execution with Pragmas . . . . . . . . . . . . . . . 611Warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612The $^W Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614The Old warnings Pragma . . . . . . . . . . . . . . . . . . . . . . . . . . . 614Lexical Warnings in Perl 5.6 . . . . . . . . . . . . . . . . . . . . . . . . . . 615
The strict Pragma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620The vars Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621The refs Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623The subs Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624
Other Perl Pragmas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625autouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627blib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628charnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629constant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
xviii P e r l : T h e C o m p l e t e R e f e r e n c e
-
filetest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634less . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634lib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636ops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636overload . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637re . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637sigtrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638subs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639vars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
20 Extending and Embedding Perl . . . . . . . . . . . . . . . . . . . . 641Perl Internals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644Internal Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644Translator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646Opcodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
Perls Internal Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654The Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662Stack Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668Internals Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Extending Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669The Extension Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670XS Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670SWIG Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671Using XS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
Embedding Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698Embedding the Perl Interpreter . . . . . . . . . . . . . . . . . . . . . . . 699Using a Specific Perl Function . . . . . . . . . . . . . . . . . . . . . . . . 700Multiplicity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704XS Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705
Cooperating with Other Languages . . . . . . . . . . . . . . . . . . . . . . . . . . 706Converting Other Languages to Perl . . . . . . . . . . . . . . . . . . 706Converting Perl to Other Languages . . . . . . . . . . . . . . . . . . 711Calling Other Languages from Perl . . . . . . . . . . . . . . . . . . . 712
C o n t e n t s xix
-
Part IV
Fine-Tuning Applications
21 Debugging and Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . 715Debugging Techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
Using print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717Using caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721Using eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724Writing a Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726Reporting to syslog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729Reporting to the Windows NT/2000 Event Log . . . . . . . . . 729
Using a Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730Watches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730Stepping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730Breakpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731The Perl Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731The ActivePerl Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748
Traps for Programmers of Other Languages . . . . . . . . . . . . . . . . . . . 750Differences from awk/gawk . . . . . . . . . . . . . . . . . . . . . . . . . 750C Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752sed Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754emacs Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754Shell Script Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754Python Traps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757The Perl Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758Profiling by Hand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765Optimization Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766
22 Perl Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773Using dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775Using the Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776
The Backends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777The perlcc Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791Differences Between Interpreted and Compiled Code . . . 795
Comparing Script and Executable Speeds . . . . . . . . . . . . . . . . . . . . . 795Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797Summary Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800
23 Perl Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803Using the Supplied Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . 805
Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810Mac OS/Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811
xx P e r l : T h e C o m p l e t e R e f e r e n c e
TEAMFLY
Team-Fly
-
Writing POD Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812POD Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813Command Paragraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813Ordinary Text Paragraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816Verbatim Paragraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816Escape Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816Embedding Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . 816
Converting POD to Other Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . 818Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820Unix man Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820PostScript/PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823Converting POD to HTML On The Fly . . . . . . . . . . . . . . . . 823
24 Cross-Platform Migration Traps . . . . . . . . . . . . . . . . . . . 825Function Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826Constant Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827Execution Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828Line Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828Character Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829Data Differences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829Files and Pathnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830Performance and Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 830Platform Migration Tricks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831
Determining Your Platform . . . . . . . . . . . . . . . . . . . . . . . . . . 831Determining the Perl Version . . . . . . . . . . . . . . . . . . . . . . . . 832Checking for Supported Functions . . . . . . . . . . . . . . . . . . . . 833Function Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
25 Distributing Modules and Applications . . . . . . . . . . . . . 837Perl Makefiles and ExtUtils::MakeMaker . . . . . . . . . . . . . . . . . . . . . . 838
Perl Makefiles and CPAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 839Perl Makefiles and PPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839Extension Building and Installation Overview . . . . . . . . . . 840MakeMaker Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842Start with h2xs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843MakeMaker Configurable Options . . . . . . . . . . . . . . . . . . . . 845Creating a Dummy Makefile . . . . . . . . . . . . . . . . . . . . . . . . . 853Default Makefile Targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853Creating a New Perl Binary . . . . . . . . . . . . . . . . . . . . . . . . . . 854Targets for Package Builders . . . . . . . . . . . . . . . . . . . . . . . . . 855Related Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
C o n t e n t s xxi
-
MakeMaker Tricks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860Checking for Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
Packing for CPAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863Packing for PPM/VPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863
Part V
Appendixes
A Function Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869-X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880accept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881alarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881atan2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882bind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882binmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883bless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883caller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884chdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884chmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885chomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885chop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886chown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886chr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887chroot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888closedir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890crypt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890dbmclose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890dbmopen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891defined . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892die . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894each . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895endgrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895endhostent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895endnetent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896endprotoent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896
xxii P e r l : T h e C o m p l e t e R e f e r e n c e
-
endpwent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897endservent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897eof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897eval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899exists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900fcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901fileno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901flock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902fork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903formline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904getc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904getgrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904getgrgid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905getgrnam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906gethostbyaddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906gethostbyname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907gethostent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907getlogin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908getnetbyaddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908getnetbyname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909getnetent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909getpeername . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910getpgrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910getppid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911getpriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911getprotobyname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911getprotobynumber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912getprotoent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912getpwent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913getpwnam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914getpwuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914getservbyname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915getservbyport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915getservent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916getsockname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916getsockopt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917glob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918gmtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919
C o n t e n t s xxiii
-
grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920hex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920import . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922ioctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925lc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925lcfirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927localtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928lstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929m// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930msgctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930msgget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931msgrcv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931msgsnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932my . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933oct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934opendir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937ord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937our . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940pop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941pos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945push . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945
xxiv P e r l : T h e C o m p l e t e R e f e r e n c e
-
quotemeta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946rand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946readdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947readline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947readlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948readpipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948recv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949redo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949ref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950rename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951require . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953rewinddir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953rindex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954s/// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954scalar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955seekdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956select (filehandle) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957select (files) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957semctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958semget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958semop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958send . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959setgrent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960sethostent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960setnetent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960setpgrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961setpriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961setprotoent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962setpwent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962setservent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962setsockopt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964shmctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964shmget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965shmread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966shmwrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966shutdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
C o n t e n t s xxv
-
sin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 968socketpair . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969splice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970sprintf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972srand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972study . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974sub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974substr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975symlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975syscall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976sysopen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976sysread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978sysseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979syswrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980tell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980telldir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981tie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981tied . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982times . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982tr/// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983truncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983uc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984ucfirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984umask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984undef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985unlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985unpack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986unshift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986untie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987utime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988vec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988wait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989waitpid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
xxvi P e r l : T h e C o m p l e t e R e f e r e n c e
-
wantarray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990warn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991y/// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992
B Standard Perl Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993AnyDBM_File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994AutoLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995AutoSplit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996B::Asmdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998B::Assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999B::Bblock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999B::Bytecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999B::C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999B::CC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000B::Debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000B::Deparse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000B::Disassembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000B::Lint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001B::Showlex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001B::Stackobj . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001B::Terse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001B::Xref . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001Benchmark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002Carp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004
Import Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005CGI::Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006CGI::Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006Class::Struct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007
Using Scalar Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008Using Array Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008Using Hash Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009Using Class Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010
Config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011CPAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
Interactive Shell Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012Programmable Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1015
CPAN::FirstTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016CPAN::Nox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016Cwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
C o n t e n t s xxvii
-
Data::Dumper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017DB_File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018Devel::SelfStubber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020DirHandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020DynaLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021English . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021Env . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024Errno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025Exporter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
Unknown Symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026Tag-Handling Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026Version Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027
ExtUtils::Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027ExtUtils::Embed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1028ExtUtils::Install . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029ExtUtils::Installed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029ExtUtils::Liblist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029ExtUtils::MakeMaker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030ExtUtils::Manifest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030ExtUtils::Miniperl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030ExtUtils::Mkbootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030ExtUtils::Mksymlists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030ExtUtils::MM_OS2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030ExtUtils::MM_Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030ExtUtils::MM_VMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031ExtUtils::MM_Win32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031ExtUtils::Packlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031Fatal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031Fcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031FileCache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032FileHandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033File::Basename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035File::CheckTree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036File::Compare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037File::Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037File::DosGlob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1038File::Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039File::Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040File::Spec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041File::Spec::Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042File::Spec::OS2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043File::Spec::Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043File::Spec::VMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045
xxviii P e r l : T h e C o m p l e t e R e f e r e n c e
-
File::Spec::Win32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1046FindBin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1046GDBM_File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047Getopt::Long . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
Linkage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050Callback Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050Return Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051Customizing GetOptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
Getopt::Std . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053I18N::Collate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054IO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054IO::File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055IO::Handle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055IO::Pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058IO::Seekable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059IO::Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059IO::Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061
IO::Socket::INET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063IO::Socket::UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
IPC::Msg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066IPC::Open2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1067IPC::Open3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068IPC::Semaphore . . . . . . . . . . . . . . . . . . . . . . . . . .