perl: the complete reference

1249
TEAMFLY

Upload: martin-c-brown

Post on 08-Dec-2016

280 views

Category:

Documents


2 download

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 . . . . . . . . . . . . . . . . . . . . . . . . . .