PERL: THE COMPLETE REFERENCE
CONTENTS PART I FUNDAMENTALS PERL BACKGROUNDER VERSIONS AND NAMING CONVENTIONS PERL, PERL OR PERL? LIFE BEFORE PERL 5 6 PERL HISTORY MAIN PERL FEATURES PERL IS FREE PERL IS SIMPLE TO LEARN, CONCISE, AND EASY TO READ PERL IS FAST PERL IS EXTENSIBLE PERL HAS FLEXIBLE DATA TYPES PERL IS OBJECT ORIENTED PERL IS COLLABORATIVE COMPILER OR INTERPRETER SIMILAR PROGRAMMING LANGUAGES UNIX SHELLS TCL PYTHON JAVA C/C++ AWK/GAWK POPULAR “MYTHCONCEPTIONS” IT’S ONLY FOR THE WEB IT’S NOT MAINTENANCE FRIENDLY IT’S ONLY FOR HACKERS IT’S A SCRIPTING LANGUAGE THERE’S NO SUPPORT ALL PERL PROGRAMS ARE FREE THERE’S NO DEVELOPMENT ENVIRONMENT PERL IS A GNU PROJECT PERL IS DIFFICULT TO LEARN PERL SUCCESS STORIES PERL OVERVIEW INSTALLING AND USING PERL WRITING A PERL SCRIPT PERL UNDER UNIX PERL UNDER WINDOWS PERL UNDER MAC OS PERL COMPONENTS VARIABLES OPERATORS STATEMENTS SUBROUTINES (FUNCTIONS) MODULES WHERE NEXT? PERL PARSING RULES THE EXECUTION PROCESS SYNTAX AND PARSING RULES BASIC SYNTAX COMMENTS COMPONENT IDENTITY OPERATORS AND PRECEDENCE BARE WORDS CONTEXTS LOGICAL VALUES PERL CODING STYLES TEAMFLY VARIABLES AND DATA BASIC NAMING RULES SCALAR VARIABLES LITERALS NUMERIC LITERALS STRING LITERALS QUOTES INTERPOLATION OF ARRAY VALUES HERE DOCUMENTS ARRAYS HASHES LISTS TYPEGLOBS THE DEFINED FUNCTION AND THE UNDEFINED VALUE DEFAULT VALUES OTHER TOKENS SPECIAL VARIABLES STATEMENTS AND CONTROL STRUCTURES CODE BLOCKS CONDITIONAL STATEMENTS LOOPS WHILE LOOPS UNTIL LOOPS FOR LOOPS FOREACH LOOPS THE CONTINUE BLOCK LABELS LOOP CONTROL UNQUALIFIED BLOCKS GOTO SUBROUTINES, PACKAGES, AND MODULES FUNCTIONS ARGUMENTS RETURN VALUES ERROR NOTIFICATION CONTEXT ATTRIBUTES PROTOTYPES PACKAGES PACKAGE SYMBOL TABLES SPECIAL BLOCKS CREATING MODULES THE EXPORTER MODULE COMPARING USE AND REQUIRE SCOPE EFFECTS OF MY EFFECTS OF LOCAL EFFECTS OF OUR SCOPE WITHIN LOOPS AUTOLOADING WORKING WITH FILES FILEHANDLES OPENING AND CLOSING FILES READING AND WRITING FILEHANDLES LOCATING YOUR POSITION WITHIN A FILE MISCELLANEOUS CONTROL FUNCTIONS FILE MANAGEMENT FILE INFORMATION BASIC FILE MANAGEMENT ACCESSING DIRECTORY ENTRIES MANAGING DIRECTORIES FILE CONTROL WITH FCNTL I/O CONTROL WITH IOCTL SELECT FILE LOCKING DATA MANIPULATION WORKING WITH NUMBERS ABS—THE ABSOLUTE VALUE INT—CONVERTING FLOATING POINTS TO INTEGERS EXP—RAISING E TO THE POWER SQRT—THE SQUARE ROOT LOG—THE LOGARITHM TRIGONOMETRIC FUNCTIONS CONVERSION BETWEEN BASES CONVERSION BETWEEN CHARACTERS AND NUMBERS RANDOM NUMBERS WORKING WITH VERY SMALL INTEGERS WORKING WITH STRINGS STRING CONCATENATION STRING LENGTH CASE MODIFICATIONS END-OF-LINE CHARACTER REMOVAL STRING LOCATION EXTRACTING SUBSTRINGS STACKS SPLICING ARRAYS JOIN SPLIT GREP MAP SORT REVERSE REGULAR EXPRESSIONS PATTERN MODIFIERS THE MATCH OPERATOR THE SUBSTITUTION OPERATOR TRANSLATION REGULAR EXPRESSION ELEMENTS REGULAR EXPRESSION VARIABLES REGULAR EXPRESSION EXTENSIONS/ASSERTIONS PRECOMPILING EXPRESSIONS REGULAR EXPRESSION SUPPORT FUNCTIONS UNICODE PERL’S INTERPRETATION OF UNICODE UNICODE CHARACTERS IN PERL UNICODE’S EFFECTS ON PERL CODE ERRORS AND TRAPPING THEM ADDING ERROR CHECKING TO YOUR SCRIPTS ERROR CHECKING METHODS ERROR CHECKING GUIDELINES WHAT TO CHECK WHAT NOT TO CHECK WHEN TO STOP CHECKING DON’T CHECK THINGS TWICE FUNCTIONS, RETURN VALUES, AND NESTING ERROR MESSAGES AND NUMBERS REPORTING ERRORS WITHIN SCRIPTS THE WARN FUNCTION THE DIE FUNCTION DIRECTIVES AND TOKENS REPORTING ERRORS WITHIN MODULES THE CARP FUNCTION THE CLUCK FUNCTION THE CROAK FUNCTION THE CONFESS FUNCTION PART II PROGRAMMING WITH PERL COMPLEX DATA STRUCTURES ACCESSING PACKED DATA STRUCTURES REFERENCES CREATING HARD REFERENCES DEREFERENCING DETERMINING A REFERENCE TYPE SYMBOLIC REFERENCES COMPLEX STRUCTURES ARRAYS OF ARRAYS HASHES OF HASHES ARRAYS OF HASHES HASHES OF ARRAYS BEYOND TWO DIMENSIONS OBJECTS OBJECT BASICS CREATING AND USING OBJECTS METHODS CLASSES AND INHERITANCE DESTRUCTORS AND GARBAGE COLLECTION COMPARING PERL OBJECTS TO OTHER LANGUAGES USING TIE CREATING NEW TIE CLASSES SYSTEM INFORMATION USERS AND GROUPS GETTING UNIX PASSWORD ENTRIES GETTING UNIX GROUP ENTRIES PASSWORD ENCRYPTION TIME GMTIME AND LOCALTIME TIME FUNCTION COMPARING TIME VALUES CONVERTING DATES AND TIMES INTO EPOCHS TIME ARITHMETIC TIMES FUNCTION SLEEP FUNCTION ALARMS ENVIRONMENT VARIABLES NETWORKING OBTAINING NETWORK INFORMATION HOSTS PROTOCOLS SERVICES NETWORKS THE SOCKET MODULE ADDRESS RESOLUTION AND CONVERSION ADDRESS CONSTANTS SOCKET STRUCTURES LINE TERMINATION CONSTANTS SOCKET COMMUNICATION CONNECTING TO A REMOTE SOCKET LISTENING FOR SOCKET CONNECTIONS USING IO::SOCKET CLIENT SIDE SERVER SIDE USING IO::SOCKET AND IO::SELECT GETTING SOCKET ADDRESSES CLOSING SOCKETS SOCKET OPTIONS DATA TRANSFER GRAHAM BARR’S LIBNET BUNDLE GISLE AAS’ LWP BUNDLE DATABASE SYSTEMS TEXT DATABASES DELIMITED DATABASES FIXED-LENGTH RECORDS DBM DATABASES DBM IMPLEMENTATIONS DBM FUNCTIONS USING TIED DBM DATABASES CONVERTING BETWEEN DBM FORMATS USING ANYDBM_FILE GDBM FEATURES BERKELEY DB FEATURES STORING COMPLEX DATA IN A DBM DATABASE RELATIONAL DATABASES WITH DBM DATABASE FILE LOCKING USING THE DBI AND WIN32::ODBC TOOLKITS DBI WIN32::ODBC DATABASE MECHANICS AND COMPATIBILITY CONNECTING TO A DATABASE EXECUTING SIMPLE QUERIES EXECUTING EXTENDED QUERIES CLOSING THE CONNECTION IDENTIFYING ERRORS DOING MORE SQL REFRESHER SQL STATEMENTS INTERPROCESS COMMUNICATION PROCESSES CONTROLLING PERL EXECUTION PROCESS INFORMATION PROCESS GROUPS PROCESS PRIORITY SIGNALS SIGNAL HANDLERS THE __WARN__ AND __DIE__ SIGNALS SENDING SIGNALS PIPES ANONYMOUS PIPES TWO-WAY COMMUNICATION NAMED PIPES NAMED PIPES UNDER WINDOWS SAFE PIPES EXECUTING ADDITIONAL PROCESSES RUNNING OTHER PROGRAMS REPLACING THE CURRENT SCRIPT CREATING CHILD PROCESSES OTHER FUNCTION CALLS SYSTEM V IPC OTHER EXECUTION ENHANCEMENTS PERL ON THE COMMAND LINE SPECIAL HANDLING PERL ENVIRONMENT VARIABLES PERL IN PERL (EVAL) USING EVAL EXPR USING EVAL BLOCK TRAPPING EXCEPTIONS RETURNING INFORMATION EVAL AND THE __DIE__ SIGNAL HANDLER THREADS HOW MULTITASKING WORKS FROM MULTITASKING TO MULTITHREADING COMPARING THREADS TO MULTIPLE PROCESSES COMPARING THREADS TO SELECT() THREADS AND PERL CREATING A NEW THREAD CREATING A THREAD USING AN ANONYMOUS SUBROUTINE CONTROLLING A THREAD CONTROLLING VARIABLES CONTROLLING SUBROUTINES QUEUES SEMAPHORES SECURITY USING TAINT MODE THE SAFE AND OPCODE MODULES PART III DEVELOPING APPLICATIONS USER INTERFACE TOOLS PROCESSING COMMAND LINE ARGUMENTS GETOPT::STD GETOPT::LONG PERL’S REPORTING MECHANISM HEADERS AND FOOTERS FORMAT FUNCTIONS FORMAT VARIABLES ADVANCED USER INTERFACES WORKING WITH A TERMINAL USING TK INSTALLING TK UNDER UNIX INSTALLING TK UNDER WINDOWS HELLO FROM TK EVENT LOOPS WIDGETS CONTROLLING WINDOW GEOMETRY EASING THE PROCESS DEVELOPING FOR THE WORLD WIDE WEB (WWW) HTML UNIFORM RESOURCE LOCATORS WEB OPERATION OVERVIEW THE ENVIRONMENT THE COMMON GATEWAY INTERFACE EXTRACTING FORM DATA SENDING INFORMATION BACK TO THE BROWSER DOCUMENT BODY SMARTER WEB PROGRAMMING THE CGI MODULE COOKIES PARSING HTML PARSING XML DEBUGGING AND TESTING CGI APPLICATIONS CONTROLLING EXECUTION WITH PRAGMAS WARNINGS THE $^W VARIABLE THE OLD WARNINGS PRAGMA LEXICAL WARNINGS IN PERL 5 6 THE STRICT PRAGMA THE VARS OPTION THE REFS OPTION THE SUBS OPTION OTHER PERL PRAGMAS ATTRIBUTES AUTOUSE BASE BLIB BYTES CHARNAMES CONSTANT DIAGNOSTICS FIELDS FILETEST INTEGER LESS LIB LOCALE OPEN OPS OVERLOAD SIGTRAP SUBS VARS EXTENDING AND EMBEDDING PERL PERL INTERNALS ARCHITECTURE INTERNAL OBJECTS TRANSLATOR OPCODES COMPILATION EXECUTION PERL’S INTERNAL STRUCTURES THE STACK STACK SIZE INTERNALS SUMMARY EXTENDING PERL THE EXTENSION INTERFACE XS OVERVIEW SWIG OVERVIEW USING XS EMBEDDING PERL EMBEDDING THE PERL INTERPRETER USING A SPECIFIC PERL FUNCTION MULTIPLICITY XS INITIALIZATION COOPERATING WITH OTHER LANGUAGES CONVERTING OTHER LANGUAGES TO PERL CONVERTING PERL TO OTHER LANGUAGES CALLING OTHER LANGUAGES FROM PERL PART IV FINE-TUNING APPLICATIONS DEBUGGING AND TUNING DEBUGGING TECHNIQUES USING PRINT USING CALLER USING EVAL WRITING A LOG REPORTING TO SYSLOG REPORTING TO THE WINDOWS NT/2000 EVENT LOG USING A DEBUGGER WATCHES STEPPING BREAKPOINTS THE PERL DEBUGGER THE ACTIVEPERL DEBUGGER TRAPS FOR PROGRAMMERS OF OTHER LANGUAGES DIFFERENCES FROM AWK/GAWK C TRAPS SED TRAPS EMACS TRAPS SHELL SCRIPT TRAPS PYTHON TRAPS OPTIMIZATION THE PERL PROFILER PROFILING BY HAND OPTIMIZATION GUIDE PERL COMPILER USING DUMP USING THE COMPILER THE BACKENDS THE PERLCC FRONTEND DIFFERENCES BETWEEN INTERPRETED AND COMPILED CODE COMPARING SCRIPT AND EXECUTABLE SPEEDS TESTS SUMMARY RESULTS PERL DOCUMENTATION USING THE SUPPLIED DOCUMENTATION UNIX WINDOWS MAC OS/MAC OS X TEAMFLY WRITING POD DOCUMENTATION POD COMPONENTS COMMAND PARAGRAPH ORDINARY TEXT PARAGRAPH VERBATIM PARAGRAPH ESCAPE SEQUENCES EMBEDDING DOCUMENTATION CONVERTING POD TO OTHER FORMATS TEXT UNIX MAN PAGES POSTSCRIPT/PDF CONVERTING POD TO HTML ON THE FLY CROSS-PLATFORM MIGRATION TRAPS FUNCTION SUPPORT CONSTANT COMPATIBILITY EXECUTION ENVIRONMENT ERRORS LINE TERMINATION CHARACTER SETS DATA DIFFERENCES FILES AND PATHNAMES PERFORMANCE AND RESOURCES PLATFORM MIGRATION TRICKS DETERMINING YOUR PLATFORM DETERMINING THE PERL VERSION CHECKING FOR SUPPORTED FUNCTIONS FUNCTION OVERLOADING DISTRIBUTING MODULES AND APPLICATIONS PERL MAKEFILES AND EXTUTILS::MAKEMAKER PERL MAKEFILES AND CPAN PERL MAKEFILES AND PPM EXTENSION BUILDING AND INSTALLATION OVERVIEW MAKEMAKER OVERVIEW START WITH H2XS MAKEMAKER CONFIGURABLE OPTIONS CREATING A DUMMY MAKEFILE DEFAULT MAKEFILE TARGETS CREATING A NEW PERL BINARY TARGETS FOR PACKAGE BUILDERS RELATED MODULES