ebook img

Pro Perl PDF

1046 Pages·2006·4.13 MB·English
by  
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Pro Perl

Pro Perl PETER WAINWRIGHT Pro Perl Copyright © 2005 by Peter Wainwright All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher. ISBN (pbk): 1-59059-438-X Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1 Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. Lead Editor: Jason Gilmore Technical Reviewer: Andrew Lester Editorial Board: Steve Anglin, Dan Appleman, Ewan Buckingham, Gary Cornell, Tony Davis, JasonGilmore, Jonathan Hassell, Chris Mills, Dominic Shakeshaft, Jim Sumser Assistant Publisher: Grace Wong Project Manager: Tracy Brown Collins Copy Manager: Nicole LeClerc Copy Editor: Ami Knox Production Manager: Kari Brooks-Copony Production Editor: Ellie Fountain Compositor: Dina Quan Proofreaders: Carol Pinchefsky, Linda Seifert Indexer: Michael Brinkman Artist: Kinetic Publishing Services, LLC Cover Designer: Kurt Krames Cover Photo: Carol Pinchefsky Manufacturing Manager: Tom Debolski Distributed to the book trade in the United States by Springer-Verlag New York, Inc., 233 Spring Street, 6thFloor, New York, NY 10013, and outside the United States by Springer-Verlag GmbH & Co. KG, Tiergartenstr. 17, 69112 Heidelberg, Germany. In the United States: phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or visit http://www.springer-ny.com. Outside the United States: fax +49 6221 345229, e-mail [email protected], or visit http://www.springer.de. For information on translations, please contact Apress directly at 2560 Ninth Street, Suite 219, Berkeley, CA 94710. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com. The information in this book is distributed on an “as is” basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indi- rectly by the information contained in this work. The source code for this book is available to readers at http://www.apress.comin the Downloads section. Contents at a Glance About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii CHAPTER 1 Introducing Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 CHAPTER 2 Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 CHAPTER 3 Scalars:Integers,Floating-Point Numbers,and Strings . . . . . . . . . . . . . . 49 CHAPTER 4 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 CHAPTER 5 Arrays,Hashes,References,and Typeglobs . . . . . . . . . . . . . . . . . . . . . . . . 109 CHAPTER 6 Structure,Flow,and Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 CHAPTER 7 Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 CHAPTER 8 Scope and Visibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 CHAPTER 9 Using Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 CHAPTER 10 Inside Modules and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 CHAPTER 11 Interpolation and Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 CHAPTER 12 Input and Output with Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 CHAPTER 13 Files and Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 CHAPTER 14 Command Line and Shell Interaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 CHAPTER 15 Terminal Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 CHAPTER 16 Warnings and Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 CHAPTER 17 Debugging,Testing,and Profiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 CHAPTER 18 Text Processing,Documentation,and Reports . . . . . . . . . . . . . . . . . . . . . . 659 CHAPTER 19 Object-Oriented Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713 CHAPTER 20 Extending and Embedding Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815 CHAPTER 21 Processes,Signals,and Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853 CHAPTER 22 Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909 CHAPTER 23 Unicode,Locale,and Internationalization . . . . . . . . . . . . . . . . . . . . . . . . . . . 955 INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991 iii Contents About the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii ■CHAPTER 1 Introducing Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Key Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Supported Platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Perl History and Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Finding Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Building and Installing Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Installing Prebuilt Perl Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Building Perl from Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Running Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Starting Perl Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 The Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 The Perl Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Installing Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Installing Modules by Hand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Installing Modules from CPAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Installing Modules on Windows with PPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 ■CHAPTER 2 Basic Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Values and Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Comments and Whitespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Operators and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Expressions and Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Scalars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 The Undefined Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Typeglobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Special Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 String Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 v vi ■CONTENTS Matching,Substitution,and Transliteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Blocks,Conditions,and Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Conditional Blocks:if,else,and unless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Looping Blocks:foreach and while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Modules and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Warnings and Strictness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Variable Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Scope and Visibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 ■CHAPTER 3 Scalars: Integers,Floating-Point Numbers,and Strings . . . . . 49 Automatic Conversion:One Scalar Fits All . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Integers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Floating-Point Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 The use integer Pragma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Mathematical Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Quotes and Quoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 “Here”Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Bareword Strings and Version Number Strings . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Converting Strings into Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Converting Strings into Lists and Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Functions for Manipulating Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 String Formatting with printf and sprintf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Schizophrenic Scalars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 ■CHAPTER 4 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Operator Types and Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Assignment Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Shift Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 String and List Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Bitwise Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Increment and Decrement Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Combination Assignment Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Comparison Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Regular Expression Binding Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Comma and Relationship Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Reference and Dereference Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Range Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Ternary Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 ■CONTENTS vii Precedence and Associativity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Precedence and Parentheses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Disabling Functions and Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Overloading Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Operators vs.Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 ■CHAPTER 5 Arrays,Hashes,References,and Typeglobs . . . . . . . . . . . . . . . . . 109 Lists and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Creating Lists and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Accessing Lists and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Manipulating Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Converting Lists and Arrays into Scalars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Converting Lists and Arrays into Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Creating Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Accessing Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Manipulating Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Converting Hashes into Scalars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Converting Hashes into Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Pseudohashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Restricted Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Hard References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Symbolic References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Complex Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 The Problem with Nesting—My Lists Went Flat! . . . . . . . . . . . . . . . . . . . . . . . . 143 Lists of Lists and Multidimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Hashes of Hashes and Other Variations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Adding to and Modifying Complex Data Structures . . . . . . . . . . . . . . . . . . . . . . 146 Creating Complex Data Structures Programmatically . . . . . . . . . . . . . . . . . . . . 147 Traversing Complex Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Typeglobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Defining Typeglobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Manipulating Typeglobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Accessing Typeglobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 The Undefined Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Tests of Existence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Using the Undefined Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Using undef As a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Declaring Scalar Constants with the constant Pragma . . . . . . . . . . . . . . . . . . . 161 Declaring Constant Scalar Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Declaring List and Hash Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Constant References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Listing and Checking for the Existence of Constants . . . . . . . . . . . . . . . . . . . . . 163 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 viii ■CONTENTS ■CHAPTER 6 Structure,Flow,and Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Declarations,Statements,Expressions,and Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Expressions and Simple Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Blocks and Compound Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 What Is Truth? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 if,else,and elsif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 unless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Writing Conditions with Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 The Ternary Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Switches and Multibranched Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Returning Values from Multibranched Conditions . . . . . . . . . . . . . . . . . . . . . . . 184 Loops and Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Writing C-Style Loops with for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Writing Better Loops with foreach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Conditional Loops—while,until,and do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Controlling Loop Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 The goto Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 map and grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 ■CHAPTER 7 Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Declaring and Calling Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Anonymous Subroutines and Subroutine References . . . . . . . . . . . . . . . . . . . . 204 Strict Subroutines and the use strict subs Pragma . . . . . . . . . . . . . . . . . . . . . . 206 Predeclaring Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 The Subroutine Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Checking for and Defining Subroutines On the Fly . . . . . . . . . . . . . . . . . . . . . . 213 Passing Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Passing Lists and Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Converting Scalar Subroutines into List Processors . . . . . . . . . . . . . . . . . . . . . 218 Passing @_ Directly into Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Named Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Prototypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Defining the Number of Parameters and Their Scope . . . . . . . . . . . . . . . . . . . . 223 Prototyping Code References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Subroutines As Scalar Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Requiring Variables Rather Than Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 Optional Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Disabling Prototypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Retrieving and Setting Prototypes Programmatically . . . . . . . . . . . . . . . . . . . . . 229 Returning Values from Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Returning the Undefined Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Responding to the Calling Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Assigning Values to Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 ■CONTENTS ix Closures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Anonymous Closures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Special Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Accessing Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Package Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 ■CHAPTER 8 Scope and Visibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Package Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Defining Package Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Using strict Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Declaring Global Package Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Declaring Global Package Variables with use vars . . . . . . . . . . . . . . . . . . . . . . 246 Localizing Package Variables with local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 Automatic Localization in Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 Lexical Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Declaring Lexical Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Preserving Lexical Variables Outside Their Scope . . . . . . . . . . . . . . . . . . . . . . . 251 Lexically Declaring Global Package Variables with our . . . . . . . . . . . . . . . . . . . 252 The Symbol Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 The main Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 The Symbol Table Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Manipulating the Symbol Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 Examining the Symbol Table Directly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 ■CHAPTER 9 Using Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Loading Code Using do,require,and use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Import Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Suppressing Default Imports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Disabling Features with no . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 The if Pragma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Testing for Module Versions and the Version of Perl . . . . . . . . . . . . . . . . . . . . . 265 Pragmatic Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 How Pragmatic Modules Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Scope of Pragmatic Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 The Special Hash %INC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 The Special Array @INC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 Modifying @INC Externally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Modifying @INC Internally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Locating Libraries Relative to the Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Checking for the Availability of a Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Finding Out What Modules Are Installed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Postponing Module Loading Until Use with autouse . . . . . . . . . . . . . . . . . . . . . . . . . . 275 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 x ■CONTENTS ■CHAPTER 10 Inside Modules and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Modules and Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Manipulating Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Finding Package Names Programmatically . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 Manipulating Package Names Programmatically . . . . . . . . . . . . . . . . . . . . . . . 279 Removing a Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 BEGIN Blocks,END Blocks,and Other Animals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 BEGIN Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 END Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 The CHECK and INIT Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 Autoloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Autoloading Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Self-Defining Instead of Autoloading Subroutines . . . . . . . . . . . . . . . . . . . . . . . 291 AutoLoader and SelfLoader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Importing and Exporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 The Import Mechanism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Exporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300 Package Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Attribute Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Creating Installable Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Well-Written Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Creating a Working Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Building an Installable Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Adding a Test Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Uploading Modules to CPAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 ■CHAPTER 11 Interpolation and Regular Expressions . . . . . . . . . . . . . . . . . . . . . . 321 String Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 Interpolating Metacharacters and Character Codes . . . . . . . . . . . . . . . . . . . . . 322 Interpolating Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Interpolating Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Where Interpolation Happens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 Interpolating Text Inside Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 Protecting Strings Against Interpolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Where Regular Expressions Occur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Regular Expression Delimiters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Elements of Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 More Advanced Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Pattern Match Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Regular Expression Metacharacters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Extracting Matched Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 Matching More Than Once . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Documenting Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 Substitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 ■CONTENTS xi Extended Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Controlling Tainted Data and Extended Patterns . . . . . . . . . . . . . . . . . . . . . . . . 375 Regular Expressions vs.Wildcards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Writing Efficient Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Checking the Validity of Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . 384 Debugging Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Transliteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Transliteration Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 ■CHAPTER 12 Input and Output with Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 IO and Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 The Filehandle Data Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 Standard Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394 Creating Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Creating Filehandles with open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Creating Filehandles with IO::Handle and IO::File . . . . . . . . . . . . . . . . . . . . . . . 398 The DATA Filehandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Anonymous Temporary Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 In-Memory Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 Other Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 Referring to Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Reading from Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 The Readline Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Finer Control over Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Detecting the End of File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 Reading a Single Character . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 Writing to Filehandles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 Buffering and Autoflush Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 Binary and Text Files,Layers,Encodings,and Transforms . . . . . . . . . . . . . . . . . . . . . . 410 Default Layers and the PERLIO Environment Variable . . . . . . . . . . . . . . . . . . . . 411 Finding the Existing Layers of a Filehandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 Establishing Layers at Filehandle Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 The binmode Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 The open Pragma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 Specifying and Creating Custom Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 Random Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 seek to a Specific Place Within a File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 Clearing the End-of-File Condition with seek . . . . . . . . . . . . . . . . . . . . . . . . . . 417 Writing at the End of File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Finding the Current Position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Object-Oriented Random Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 Truncating and Resizing Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419 File Locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Establishing File Locks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 File Locking Issues and Caveats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

Description:
For information on translations, please contact Apress directly at 2560 Ninth The information in this book is distributed on an “as is” basis, without
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.