PERL COOKBOOK
TABLE OF CONTENTS 1 STRINGS 11 ACCESSING SUBSTRINGS 12 ESTABLISHING A DEFAULT VALUE 13 EXCHANGING VALUES WITHOUT USING TEMPORARY VARIABLES 14 CONVERTING BETWEEN CHARACTERS AND VALUES 15 USING NAMED UNICODE CHARACTERS 16 PROCESSING A STRING ONE CHARACTER AT A TIME 17 REVERSING A STRING BY WORD OR CHARACTER 18 TREATING UNICODE COMBINED CHARACTERS AS SINGLE CHARACTERS 19 CANONICALIZING STRINGS WITH UNICODE COMBINED CHARACTERS 110 TREATING A UNICODE STRING AS OCTETS 111 EXPANDING AND COMPRESSING TABS 112 EXPANDING VARIABLES IN USER INPUT 113 CONTROLLING CASE 114 PROPERLY CAPITALIZING A TITLE OR HEADLINE 115 INTERPOLATING FUNCTIONS AND EXPRESSIONS WITHIN STRINGS 116 INDENTING HERE DOCUMENTS 117 REFORMATTING PARAGRAPHS 118 ESCAPING CHARACTERS 119 TRIMMING BLANKS FROM THE ENDS OF A STRING 120 PARSING COMMA-SEPARATED DATA 121 CONSTANT VARIABLES 122 SOUNDEX MATCHING 123 PROGRAM: FIXSTYLE 124 PROGRAM: PSGREP 2 NUMBERS 21 CHECKING WHETHER A STRING IS A VALID NUMBER 22 ROUNDING FLOATING-POINT NUMBERS 23 COMPARING FLOATING-POINT NUMBERS 24 OPERATING ON A SERIES OF INTEGERS 25 WORKING WITH ROMAN NUMERALS 26 GENERATING RANDOM NUMBERS 27 GENERATING REPEATABLE RANDOM NUMBER SEQUENCES 28 MAKING NUMBERS EVEN MORE RANDOM 29 GENERATING BIASED RANDOM NUMBERS 210 DOING TRIGONOMETRY IN DEGREES, NOT RADIANS 211 CALCULATING MORE TRIGONOMETRIC FUNCTIONS 212 TAKING LOGARITHMS 213 MULTIPLYING MATRICES 214 USING COMPLEX NUMBERS 215 CONVERTING BINARY, OCTAL, AND HEXADECIMAL NUMBERS 216 PUTTING COMMAS IN NUMBERS 217 PRINTING CORRECT PLURALS 218 PROGRAM: CALCULATING PRIME FACTORS 3 DATES AND TIMES 31 FINDING TODAY’S DATE 32 CONVERTING DMYHMS TO EPOCH SECONDS 33 CONVERTING EPOCH SECONDS TO DMYHMS 34 ADDING TO OR SUBTRACTING FROM A DATE 35 DIFFERENCE OF TWO DATES 36 DAY IN A WEEK/MONTH/YEAR OR WEEK NUMBER 37 PARSING DATES AND TIMES FROM STRINGS 38 PRINTING A DATE 39 HIGH-RESOLUTION TIMERS 310 SHORT SLEEPS 311 PROGRAM: HOPDELTA 4 ARRAYS 41 SPECIFYING A LIST IN YOUR PROGRAM 42 PRINTING A LIST WITH COMMAS 43 CHANGING ARRAY SIZE 44 IMPLEMENTING A SPARSE ARRAY 45 ITERATING OVER AN ARRAY 46 ITERATING OVER AN ARRAY BY REFERENCE 47 EXTRACTING UNIQUE ELEMENTS FROM A LIST 48 FINDING ELEMENTS IN ONE ARRAY BUT NOT ANOTHER 49 COMPUTING UNION, INTERSECTION, OR DIFFERENCE OF UNIQUE LISTS 410 APPENDING ONE ARRAY TO ANOTHER 411 REVERSING AN ARRAY 412 PROCESSING MULTIPLE ELEMENTS OF AN ARRAY 413 FINDING THE FIRST LIST ELEMENT THAT PASSES A TEST 414 FINDING ALL ELEMENTS IN AN ARRAY MATCHING CERTAIN CRITERIA 415 SORTING AN ARRAY NUMERICALLY 416 SORTING A LIST BY COMPUTABLE FIELD 417 IMPLEMENTING A CIRCULAR LIST 418 RANDOMIZING AN ARRAY 419 PROGRAM: WORDS 420 PROGRAM: PERMUTE 5 HASHES 51 ADDING AN ELEMENT TO A HASH 52 TESTING FOR THE PRESENCE OF A KEY IN A HASH 53 CREATING A HASH WITH IMMUTABLE KEYS OR VALUES 54 DELETING FROM A HASH 55 TRAVERSING A HASH 56 PRINTING A HASH 57 RETRIEVING FROM A HASH IN INSERTION ORDER 58 HASHES WITH MULTIPLE VALUES PER KEY 59 INVERTING A HASH 510 SORTING A HASH 511 MERGING HASHES 512 FINDING COMMON OR DIFFERENT KEYS IN TWO HASHES 513 HASHING REFERENCES 514 PRESIZING A HASH 515 FINDING THE MOST COMMON ANYTHING 516 REPRESENTING RELATIONSHIPS BETWEEN DATA 517 PROGRAM: DUTREE 6 PATTERN MATCHING 61 COPYING AND SUBSTITUTING SIMULTANEOUSLY 62 MATCHING LETTERS 63 MATCHING WORDS 64 COMMENTING REGULAR EXPRESSIONS 65 FINDING THE NTH OCCURRENCE OF A MATCH 66 MATCHING WITHIN MULTIPLE LINES 67 READING RECORDS WITH A SEPARATOR 68 EXTRACTING A RANGE OF LINES 69 MATCHING SHELL GLOBS AS REGULAR EXPRESSIONS 610 SPEEDING UP INTERPOLATED MATCHES 611 TESTING FOR A VALID PATTERN 612 HONORING LOCALE SETTINGS IN REGULAR EXPRESSIONS 613 APPROXIMATE MATCHING 614 MATCHING FROM WHERE THE LAST PATTERN LEFT OFF 615 GREEDY AND NON-GREEDY MATCHES 616 DETECTING DOUBLED WORDS 617 MATCHING NESTED PATTERNS 618 EXPRESSING AND, OR, AND NOT IN A SINGLE PATTERN 619 MATCHING A VALID MAIL ADDRESS 620 MATCHING ABBREVIATIONS 621 PROGRAM: URLIFY 622 PROGRAM: TCGREP 623 REGULAR EXPRESSION GRAB BAG 7 FILE ACCESS 71 OPENING A FILE 72 OPENING FILES WITH UNUSUAL FILENAMES 73 EXPANDING TILDES IN FILENAMES 74 MAKING PERL REPORT FILENAMES IN ERROR MESSAGES 75 STORING FILEHANDLES INTO VARIABLES 76 WRITING A SUBROUTINE THAT TAKES FILEHANDLES AS BUILT-INS DO 77 CACHING OPEN OUTPUT FILEHANDLES 78 PRINTING TO MANY FILEHANDLES SIMULTANEOUSLY 79 OPENING AND CLOSING FILE DESCRIPTORS BY NUMBER 710 COPYING FILEHANDLES 711 CREATING TEMPORARY FILES 712 STORING A FILE INSIDE YOUR PROGRAM TEXT 713 STORING MULTIPLE FILES IN THE DATA AREA 714 WRITING A UNIX-STYLE FILTER PROGRAM 715 MODIFYING A FILE IN PLACE WITH A TEMPORARY FILE 716 MODIFYING A FILE IN PLACE WITH THE -I SWITCH 717 MODIFYING A FILE IN PLACE WITHOUT A TEMPORARY FILE 718 LOCKING A FILE 719 FLUSHING OUTPUT 720 DOING NON-BLOCKING I/O 721 DETERMINING THE NUMBER OF UNREAD BYTES 722 READING FROM MANY FILEHANDLES WITHOUT BLOCKING 723 READING AN ENTIRE LINE WITHOUT BLOCKING 724 PROGRAM: NETLOCK 725 PROGRAM: LOCKAREA 8 FILE CONTENTS 81 READING LINES WITH CONTINUATION CHARACTERS 82 COUNTING LINES (OR PARAGRAPHS OR RECORDS) IN A FILE 83 PROCESSING EVERY WORD IN A FILE 84 READING A FILE BACKWARD BY LINE OR PARAGRAPH 85 TRAILING A GROWING FILE 86 PICKING A RANDOM LINE FROM A FILE 87 RANDOMIZING ALL LINES 88 READING A PARTICULAR LINE IN A FILE 89 PROCESSING VARIABLE-LENGTH TEXT FIELDS 810 REMOVING THE LAST LINE OF A FILE 811 PROCESSING BINARY FILES 812 USING RANDOM-ACCESS I/O 813 UPDATING A RANDOM-ACCESS FILE 814 READING A STRING FROM A BINARY FILE 815 READING FIXED-LENGTH RECORDS 816 READING CONFIGURATION FILES 817 TESTING A FILE FOR TRUSTWORTHINESS 818 TREATING A FILE AS AN ARRAY 819 SETTING THE DEFAULT I/O LAYERS 820 READING OR WRITING UNICODE FROM A FILEHANDLE 821 CONVERTING MICROSOFT TEXT FILES INTO UNICODE 822 COMPARING THE CONTENTS OF TWO FILES 823 PRETENDING A STRING IS A FILE 824 PROGRAM: TAILWTMP 825 PROGRAM: TCTEE 826 PROGRAM: LASTON 827 PROGRAM: FLAT FILE INDEXES 9 DIRECTORIES 91 GETTING AND SETTING TIMESTAMPS 92 DELETING A FILE 93 COPYING OR MOVING A FILE 94 RECOGNIZING TWO NAMES FOR THE SAME FILE 95 PROCESSING ALL FILES IN A DIRECTORY 96 GLOBBING, OR GETTING A LIST OF FILENAMES MATCHING A PATTERN 97 PROCESSING ALL FILES IN A DIRECTORY RECURSIVELY 98 REMOVING A DIRECTORY AND ITS CONTENTS 99 RENAMING FILES 910 SPLITTING A FILENAME INTO ITS COMPONENT PARTS 911 WORKING WITH SYMBOLIC FILE PERMISSIONS INSTEAD OF OCTAL VALUES 912 PROGRAM: SYMIRROR 913 PROGRAM: LST 10 SUBROUTINES 101 ACCESSING SUBROUTINE ARGUMENTS 102 MAKING VARIABLES PRIVATE TO A FUNCTION 103 CREATING PERSISTENT PRIVATE VARIABLES 104 DETERMINING CURRENT FUNCTION NAME 105 PASSING ARRAYS AND HASHES BY REFERENCE 106 DETECTING RETURN CONTEXT 107 PASSING BY NAMED PARAMETER 108 SKIPPING SELECTED RETURN VALUES 109 RETURNING MORE THAN ONE ARRAY OR HASH 1010 RETURNING FAILURE 1011 PROTOTYPING FUNCTIONS 1012 HANDLING EXCEPTIONS 1013 SAVING GLOBAL VALUES 1014 REDEFINING A FUNCTION 1015 TRAPPING UNDEFINED FUNCTION CALLS WITH AUTOLOAD 1016 NESTING SUBROUTINES 1017 WRITING A SWITCH STATEMENT 1018 PROGRAM: SORTING YOUR MAIL 11 REFERENCES AND RECORDS 111 TAKING REFERENCES TO ARRAYS 112 MAKING HASHES OF ARRAYS 113 TAKING REFERENCES TO HASHES 114 TAKING REFERENCES TO FUNCTIONS 115 TAKING REFERENCES TO SCALARS 116 CREATING ARRAYS OF SCALAR REFERENCES 117 USING CLOSURES INSTEAD OF OBJECTS 118 CREATING REFERENCES TO METHODS 119 CONSTRUCTING RECORDS 1110 READING AND WRITING HASH RECORDS TO TEXT FILES 1111 PRINTING DATA STRUCTURES 1112 COPYING DATA STRUCTURES 1113 STORING DATA STRUCTURES TO DISK 1114 TRANSPARENTLY PERSISTENT DATA STRUCTURES 1115 COPING WITH CIRCULAR DATA STRUCTURES USING WEAK REFERENCES 1116 PROGRAM: OUTLINES 1117 PROGRAM: BINARY TREES 12 PACKAGES, LIBRARIES, AND MODULES 121 DEFINING A MODULE’S INTERFACE 122 TRAPPING ERRORS IN REQUIRE OR USE 123 DELAYING USE UNTIL RUNTIME 124 MAKING VARIABLES PRIVATE TO A MODULE 125 MAKING FUNCTIONS PRIVATE TO A MODULE 126 DETERMINING THE CALLER’S PACKAGE 127 AUTOMATING MODULE CLEANUP 128 KEEPING YOUR OWN MODULE DIRECTORY 129 PREPARING A MODULE FOR DISTRIBUTION 1210 SPEEDING MODULE LOADING WITH SELFLOADER 1211 SPEEDING UP MODULE LOADING WITH AUTOLOADER 1212 OVERRIDING BUILT-IN FUNCTIONS 1213 OVERRIDING A BUILT-IN FUNCTION IN ALL PACKAGES 1214 REPORTING ERRORS AND WARNINGS LIKE BUILT-INS 1215 CUSTOMIZING WARNINGS 1216 REFERRING TO PACKAGES INDIRECTLY 1217 USING H2PH TO TRANSLATE C #INCLUDE FILES 1218 USING H2XS TO MAKE A MODULE WITH C CODE 1219 WRITING EXTENSIONS IN C WITH INLINE::C 1220 DOCUMENTING YOUR MODULE WITH POD 1221 BUILDING AND INSTALLING A CPAN MODULE 1222 EXAMPLE: MODULE TEMPLATE 1223 PROGRAM: FINDING VERSIONS AND DESCRIPTIONS OF INSTALLED MODULES 13 CLASSES, OBJECTS, AND TIES 131 CONSTRUCTING AN OBJECT 132 DESTROYING AN OBJECT 133 MANAGING INSTANCE DATA 134 MANAGING CLASS DATA 135 USING CLASSES AS STRUCTS 136 CLONING CONSTRUCTORS 137 COPY CONSTRUCTORS 138 INVOKING METHODS INDIRECTLY 139 DETERMINING SUBCLASS MEMBERSHIP 1310 WRITING AN INHERITABLE CLASS 1311 ACCESSING OVERRIDDEN METHODS 1312 GENERATING ATTRIBUTE METHODS USING AUTOLOAD 1313 COPING WITH CIRCULAR DATA STRUCTURES USING OBJECTS 1314 OVERLOADING OPERATORS 1315 CREATING MAGIC VARIABLES WITH TIE 14 DATABASE ACCESS 141 MAKING AND USING A DBM FILE 142 EMPTYING A DBM FILE 143 CONVERTING BETWEEN DBM FILES 144 MERGING DBM FILES 145 SORTING LARGE DBM FILES 146 STORING COMPLEX DATA IN A DBM FILE 147 PERSISTENT DATA 148 SAVING QUERY RESULTS TO EXCEL OR CSV 149 EXECUTING AN SQL COMMAND USING DBI 1410 ESCAPING QUOTES 1411 DEALING WITH DATABASE ERRORS 1412 REPEATING QUERIES EFFICIENTLY 1413 BUILDING QUERIES PROGRAMMATICALLY 1414 FINDING THE NUMBER OF ROWS RETURNED BY A QUERY 1415 USING TRANSACTIONS 1416 VIEWING DATA ONE PAGE AT A TIME 1417 QUERYING A CSV FILE WITH SQL 1418 USING SQL WITHOUT A DATABASE SERVER 1419 PROGRAM: GGH—GREP NETSCAPE GLOBAL HISTORY 15 INTERACTIVITY 151 PARSING PROGRAM ARGUMENTS 152 TESTING WHETHER A PROGRAM IS RUNNING INTERACTIVELY 153 CLEARING THE SCREEN 154 DETERMINING TERMINAL OR WINDOW SIZE 155 CHANGING TEXT COLOR 156 READING SINGLE CHARACTERS FROM THE KEYBOARD 157 RINGING THE TERMINAL BELL 158 USING POSIX TERMIOS 159 CHECKING FOR WAITING INPUT 1510 READING PASSWORDS 1511 EDITING INPUT 1512 MANAGING THE SCREEN 1513 CONTROLLING ANOTHER PROGRAM WITH EXPECT 1514 CREATING MENUS WITH TK 1515 CREATING DIALOG BOXES WITH TK 1516 RESPONDING TO TK RESIZE EVENTS 1517 REMOVING THE DOS SHELL WINDOW WITH WINDOWS PERL/TK 1518 GRAPHING DATA 1519 THUMBNAILING IMAGES 1520 ADDING TEXT TO AN IMAGE 1521 PROGRAM: SMALL TERMCAP PROGRAM 1522 PROGRAM: TKSHUFFLEPOD 1523 PROGRAM: GRAPHBOX 16 PROCESS MANAGEMENT AND COMMUNICATION 161 GATHERING OUTPUT FROM A PROGRAM 162 RUNNING ANOTHER PROGRAM 163 REPLACING THE CURRENT PROGRAM WITH A DIFFERENT ONE 164 READING OR WRITING TO ANOTHER PROGRAM 165 FILTERING YOUR OWN OUTPUT 166 PREPROCESSING INPUT 167 READING STDERR FROM A PROGRAM 168 CONTROLLING INPUT AND OUTPUT OF ANOTHER PROGRAM 169 CONTROLLING THE INPUT, OUTPUT, AND ERROR OF ANOTHER PROGRAM 1610 COMMUNICATING BETWEEN RELATED PROCESSES 1611 MAKING A PROCESS LOOK LIKE A FILE WITH NAMED PIPES 1612 SHARING VARIABLES IN DIFFERENT PROCESSES 1613 LISTING AVAILABLE SIGNALS 1614 SENDING A SIGNAL 1615 INSTALLING A SIGNAL HANDLER 1616 TEMPORARILY OVERRIDING A SIGNAL HANDLER 1617 WRITING A SIGNAL HANDLER 1618 CATCHING CTRL-C 1619 AVOIDING ZOMBIE PROCESSES 1620 BLOCKING SIGNALS 1621 TIMING OUT AN OPERATION 1622 TURNING SIGNALS INTO FATAL ERRORS 1623 PROGRAM: SIGRAND 17 SOCKETS 171 WRITING A TCP CLIENT 172 WRITING A TCP SERVER 173 COMMUNICATING OVER TCP 174 SETTING UP A UDP CLIENT 175 SETTING UP A UDP SERVER 176 USING UNIX DOMAIN SOCKETS 177 IDENTIFYING THE OTHER END OF A SOCKET 178 FINDING YOUR OWN NAME AND ADDRESS 179 CLOSING A SOCKET AFTER FORKING 1710 WRITING BIDIRECTIONAL CLIENTS 1711 FORKING SERVERS 1712 PRE-FORKING SERVERS 1713 NON-FORKING SERVERS 1714 MULTITASKING SERVER WITH THREADS 1715 WRITING A MULTITASKING SERVER WITH POE 1716 WRITING A MULTIHOMED SERVER 1717 MAKING A DAEMON SERVER 1718 RESTARTING A SERVER ON DEMAND 1719 MANAGING MULTIPLE STREAMS OF INPUT 1720 PROGRAM: BACKSNIFF 1721 PROGRAM: FWDPORT 18 INTERNET SERVICES 181 SIMPLE DNS LOOKUPS 182 BEING AN FTP CLIENT 183 SENDING MAIL 184 READING AND POSTING USENET NEWS MESSAGES 186 SIMULATING TELNET FROM A PROGRAM 187 PINGING A MACHINE 188 ACCESSING AN LDAP SERVER 189 SENDING ATTACHMENTS IN MAIL 1810 EXTRACTING ATTACHMENTS FROM MAIL 1811 WRITING AN XML-RPC SERVER 1812 WRITING AN XML-RPC CLIENT 1813 WRITING A SOAP SERVER 1814 WRITING A SOAP CLIENT 1815 PROGRAM: RFRM 1816 PROGRAM: EXPN AND VRFY 19 CGI PROGRAMMING 191 WRITING A CGI SCRIPT 192 REDIRECTING ERROR MESSAGES 193 FIXING A 500 SERVER ERROR 194 WRITING A SAFE CGI PROGRAM 195 EXECUTING COMMANDS WITHOUT SHELL ESCAPES 196 FORMATTING LISTS AND TABLES WITH HTML SHORTCUTS 197 REDIRECTING TO A DIFFERENT LOCATION 198 DEBUGGING THE RAW HTTP EXCHANGE 199 MANAGING COOKIES 1910 CREATING STICKY WIDGETS 1911 WRITING A MULTISCREEN CGI SCRIPT 1912 SAVING A FORM TO A FILE OR MAIL PIPE 1913 PROGRAM: CHEMISERIE 20 WEB AUTOMATION 201 FETCHING A URL FROM A PERL SCRIPT 202 AUTOMATING FORM SUBMISSION 203 EXTRACTING URLS 204 CONVERTING ASCII TO HTML 205 CONVERTING HTML TO ASCII 206 EXTRACTING OR REMOVING HTML TAGS 207 FINDING STALE LINKS 208 FINDING FRESH LINKS 209 USING TEMPLATES TO GENERATE HTML 2010 MIRRORING WEB PAGES 2011 CREATING A ROBOT 2012 PARSING A WEB SERVER LOG FILE 2013 PROCESSING SERVER LOGS 2014 USING COOKIES 2015 FETCHING PASSWORD-PROTECTED PAGES 2016 FETCHING HTTPS:// WEB PAGES 2017 RESUMING AN HTTP GET 2018 PARSING HTML 2019 EXTRACTING TABLE DATA 2020 PROGRAM: HTMLSUB 2021 PROGRAM: HREFSUB 21 MOD_PERL 211 AUTHENTICATING 212 SETTING COOKIES 213 ACCESSING COOKIE VALUES 214 REDIRECTING THE BROWSER 215 INTERROGATING HEADERS 216 ACCESSING FORM PARAMETERS 217 RECEIVING UPLOADED FILES 218 SPEEDING UP DATABASE ACCESS 219 CUSTOMIZING APACHE’S LOGGING 2110 TRANSPARENTLY STORING INFORMATION IN URLS 2111 COMMUNICATING BETWEEN MOD_PERL AND PHP 2112 MIGRATING FROM CGI TO MOD_PERL 2113 SHARING INFORMATION BETWEEN HANDLERS 2114 RELOADING CHANGED MODULES 2115 BENCHMARKING A MOD_PERL APPLICATION 2116 TEMPLATING WITH HTML::MASON 2117 TEMPLATING WITH TEMPLATE TOOLKIT 22 XML 221 PARSING XML INTO DATA STRUCTURES 222 PARSING XML INTO A DOM TREE 223 PARSING XML INTO SAX EVENTS 224 MAKING SIMPLE CHANGES TO ELEMENTS OR TEXT 225 VALIDATING XML 226 FINDING ELEMENTS AND TEXT WITHIN AN XML DOCUMENT 227 PROCESSING XML STYLESHEET TRANSFORMATIONS 228 PROCESSING FILES LARGER THAN AVAILABLE MEMORY 229 READING AND WRITING RSS FILES 2210 WRITING XML