Perl: the Complete Reference Second Edition This Page Intentionally Left Blank

Total Page:16

File Type:pdf, Size:1020Kb

Perl: the Complete Reference Second Edition This Page Intentionally Left Blank Y L F M A E T Team-Fly® Perl: The Complete Reference Second Edition This page intentionally left blank. Perl: The Complete Reference Second Edition Martin C. Brown Osborne/McGraw-Hill New York Chicago San Francisco Lisbon London Madrid Mexico City Milan 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 by any 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 corporate training programs. For more information, please contact George Hoare, Special Sales, at [email protected] or (212) 904-4069. TERMS OF USE This is a copyrighted work and The McGraw-Hill Companies, Inc. (“McGraw-Hill”) and its licensors reserve all rights in and to the work. Use of this work is subject to these terms. Except as permitted under the Copyright Act of 1976 and the right to store and retrieve one copy of the work, you may not decompile, disassemble, reverse engineer, reproduce, modify, create derivative works based upon, transmit, distribute, disseminate, sell, publish or sublicense the work or any part of it without McGraw-Hill’s prior con- sent. You may use the work for your own noncommercial and personal use; any other use of the work is strictly prohibited. Your right 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 WARRANTIES AS TO THE ACCURACY, ADEQUACY OR COMPLETENESS OF OR RESULTS TO BE OBTAINED FROM USING THE WORK, INCLUDING ANY INFORMATION THAT CAN BE ACCESSED THROUGH THE WORK VIA HYPERLINK OR OTHERWISE, AND EXPRESSLY DISCLAIM ANY WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. McGraw-Hill and its licensors do not warrant or guarantee that the functions contained in the work will meet your requirements or that its operation will be uninterrupted or error free. Neither McGraw-Hill nor its licensors shall be liable to you or anyone else for any inaccuracy, error or 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 any indirect, incidental, special, punitive, consequential or similar damages that result from the use of or inability to use the work, even if 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 kittens who do try to help daddy with the typing, but usually just end up typing “jjskdjjvoookko000000000000000000000” About the Author Martin C. Brown is the author of six Perl books, including the first edition of Perl: The Complete Reference, Perl Programmer’s Reference, ActivePerl Developer’s Guide, and Debugging Perl. In addition to Perl, he has worked in Python, Java, Visual Basic, and other languages. A programmer for 15 years, he is the former IT director of a large advertising agency dealing with blue chip clients such as Hewlett Packard, Oracle, and Cable & Wireless. Copyright 2001 The McGraw-Hill Companies, Inc. Click Here for Terms of Use. Contents at a Glance Part I Fundamentals 1 Perl Backgrounder . 3 2 Perl Overview . 17 3 Perl Parsing Rules . 37 4 Variables and Data . 73 5 Statements and Control Structures . 109 6 Subroutines, Packages, and Modules . 123 7 Working with Files . 161 8 Data Manipulation . 209 9 Errors and Trapping Them . 269 Part II Programming with Perl 10 Complex Data Structures . 287 11 System Information . 339 12 Networking . 361 vii Copyright 2001 The McGraw-Hill Companies, Inc. Click Here for Terms of Use. viii Perl: The Complete Reference 13 Database Systems . 391 14 Interprocess Communication . 447 15 Other Execution Enhancements . 479 Part III Developing Applications 16 User Interface Tools . 513 17 Advanced User Interfaces . 529 18 Developing for the World Wide Web (WWW) . 575 19 Controlling Execution with Pragmas . 611 20 Extending and Embedding Perl . 641 Part IV Fine-Tuning Applications 21 Debugging and Tuning . 715 22 Perl Compiler . 773 23 Perl Documentation . 803 24 Cross-Platform Migration Traps . 825 25 Distributing Modules and Applications . 837 Part V Appendixes A Function Reference . 869 B Standard Perl Library . 993 C Resources . 1141 Index . 1153 Contents Acknowledgments . xxxiii Introduction . xxxv Part I Fundamentals 1 Perl Backgrounder . 3 Versions and Naming Conventions . 5 Perl, perl or PeRl? . 5 Life Before Perl 5.6 . 5 Perl History . 6 Main Perl Features . 7 Perl Is Free . 7 Perl Is Simple to Learn, Concise, and Easy to Read . 7 Perl Is Fast . 7 Perl Is Extensible . 7 Perl Has Flexible Data Types . 8 Perl Is Object Oriented . 8 Perl Is Collaborative . 8 Compiler or Interpreter . 8 ix Copyright 2001 The McGraw-Hill Companies, Inc. Click Here for Terms of Use. x Perl: The Complete Reference Similar Programming Languages . 9 Unix Shells . 9 Tcl . 10 Python . 10 Java . 11 C/C++ . 12 awk/gawk . 12 Popular “Mythconceptions” . 13 It’s Only for the Web . 13 It’s Not Maintenance Friendly . 13 It’s Only for Hackers . 13 It’s a Scripting Language . 14 There’s No Support . 14 All Perl Programs Are Free . 14 There’s No Development Environment . 14 Perl Is a GNU Project . 15 Perl Is Difficult to Learn . 15 Perl Success Stories . 15 Y 2 Perl Overview . .L . 17 Installing and Using Perl . .F . 18 Writing a Perl Script . 19 Perl Under Unix . M. 19 Perl Under Windows . 22 Perl Under Mac OS . 28 A Perl Components . 32 Variables . .E . 32 OperatorsT . 34 Statements . 34 Subroutines (Functions) . 34 Modules . 35 Where Next? . 35 3 Perl Parsing Rules . 37 The Execution Process . 38 Syntax and Parsing Rules ..

  1249
Recommended publications
  • Awstats Logfile Analyzer Documentation
    AWStats logfile analyzer 7.4 Documentation Table of contents Release Notes Reference manual What is AWStats / Features Install, Setup and Use AWStats New Features / Changelog Configuration Directives/Options Upgrade Configuration for Extra Sections feature Contribs, plugins and resources Other provided utilities Glossary of terms Other Topics Comparison with other log analyzers FAQ and Troubleshooting Benchmarks AWStats License Plugin Developement AWStats modules for third tools AWStats module for Webmin AWStats module for Dolibarr ERP & CRM Table of contents 1/103 14/07/2015 AWStats logfile analyzer 7.4 Documentation What is AWStats / Features Overview AWStats is short for Advanced Web Statistics. AWStats is powerful log analyzer which creates advanced web, ftp, mail and streaming server statistics reports based on the rich data contained in server logs. Data is graphically presented in easy to read web pages. AWStats development started in 1997 and is still developed today by same author (Laurent Destailleur). However, development is now done on "maintenance fixes" or small new features. Reason is that author spend, since July 2008, most of his time as project leader on another major OpenSource projet called Dolibarr ERP & CRM and works also at full time for TecLib, a french Open Source company. A lot of other developers maintains the software, providing patches, or packages, above all for Linux distributions (fedora, debian, ubuntu...). Designed with flexibility in mind, AWStats can be run through a web browser CGI (common gateway interface) or directly from the operating system command line. Through the use of intermediary data base files, AWStats is able to quickly process large log files, as often desired.
    [Show full text]
  • Modern Perl, Fourth Edition
    Prepared exclusively for none ofyourbusiness Prepared exclusively for none ofyourbusiness Early Praise for Modern Perl, Fourth Edition A dozen years ago I was sure I knew what Perl looked like: unreadable and obscure. chromatic showed me beautiful, structured expressive code then. He’s the right guy to teach Modern Perl. He was writing it before it existed. ➤ Daniel Steinberg President, DimSumThinking, Inc. A tour de force of idiomatic code, Modern Perl teaches you not just “how” but also “why.” ➤ David Farrell Editor, PerlTricks.com If I had to pick a single book to teach Perl 5, this is the one I’d choose. As I read it, I was reminded of the first time I read K&R. It will teach everything that one needs to know to write Perl 5 well. ➤ David Golden Member, Perl 5 Porters, Autopragmatic, LLC I’m about to teach a new hire Perl using the first edition of Modern Perl. I’d much rather use the updated copy! ➤ Belden Lyman Principal Software Engineer, MediaMath It’s not the Perl book you deserve. It’s the Perl book you need. ➤ Gizmo Mathboy Co-founder, Greater Lafayette Open Source Symposium (GLOSSY) Prepared exclusively for none ofyourbusiness We've left this page blank to make the page numbers the same in the electronic and paper books. We tried just leaving it out, but then people wrote us to ask about the missing pages. Anyway, Eddy the Gerbil wanted to say “hello.” Prepared exclusively for none ofyourbusiness Modern Perl, Fourth Edition chromatic The Pragmatic Bookshelf Dallas, Texas • Raleigh, North Carolina Prepared exclusively for none ofyourbusiness Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks.
    [Show full text]
  • Considerations on Porting Perl to the Java Virtual Machine
    UNIVERSITY OF CINCINNATI 22 January, 2001 I, Bradley M. Kuhn, hereby submit this as part of the requirements for the degree of: Master of Science in: Dept. of Elec. and Comp. Eng. and Comp. Science It is entitled: Considerations on Porting Perl to the Java Virtual Machine Approved by: Fred Annexstein John Franco Larry Wall Hongwei Xi Considerations on Porting Perl to the Java Virtual Machine A thesis submitted to the Division of Research and Advanced Studies of the University of Cincinnati in partial fulfillment of the requirements for the degree of Master of Science in the Department of Electrical and Computer Engineering and Computer Science of the College of Engineering 2001 by Bradley M. Kuhn B.S., Loyola College In Maryland, 1995 Committee Chair: John Franco, PhD. Abstract The Java Virtual Machine (JVM) is perhaps the most interesting aspect of the Java programming environment. Much attention has been placed on porting non-Java languages to the JVM. Such ports are useful since JVMs are now embedded in hardware devices, as well as in software applications such as web browsers. In addition, well designed JVM ports can utilize the JVM as a common object model for multiple languages, allowing larger applications to easily be written in and scripted with multiple programming languages. This thesis presents a survey of possible approaches for porting non-Java languages to the JVM. The advantages and disadvantages of each approach are considered. Examples of JVM ports of other programming languages, such as Python, Scheme, and Tcl are presented and considered. The focus, however, is a port of Perl to the JVM.
    [Show full text]
  • Ubuntu:Precise Ubuntu 12.04 LTS (Precise Pangolin)
    Ubuntu:Precise - http://ubuntuguide.org/index.php?title=Ubuntu:Precise&prin... Ubuntu:Precise From Ubuntu 12.04 LTS (Precise Pangolin) Introduction On April 26, 2012, Ubuntu (http://www.ubuntu.com/) 12.04 LTS was released. It is codenamed Precise Pangolin and is the successor to Oneiric Ocelot 11.10 (http://ubuntuguide.org/wiki/Ubuntu_Oneiric) (Oneiric+1). Precise Pangolin is an LTS (Long Term Support) release. It will be supported with security updates for both the desktop and server versions until April 2017. Contents 1 Ubuntu 12.04 LTS (Precise Pangolin) 1.1 Introduction 1.2 General Notes 1.2.1 General Notes 1.3 Other versions 1.3.1 How to find out which version of Ubuntu you're using 1.3.2 How to find out which kernel you are using 1.3.3 Newer Versions of Ubuntu 1.3.4 Older Versions of Ubuntu 1.4 Other Resources 1.4.1 Ubuntu Resources 1.4.1.1 Unity Desktop 1.4.1.2 Gnome Project 1.4.1.3 Ubuntu Screenshots and Screencasts 1.4.1.4 New Applications Resources 1.4.2 Other *buntu guides and help manuals 2 Installing Ubuntu 2.1 Hardware requirements 2.2 Fresh Installation 2.3 Install a classic Gnome-appearing User Interface 2.4 Dual-Booting Windows and Ubuntu 1 of 212 05/24/2012 07:12 AM Ubuntu:Precise - http://ubuntuguide.org/index.php?title=Ubuntu:Precise&prin... 2.5 Installing multiple OS on a single computer 2.6 Use Startup Manager to change Grub settings 2.7 Dual-Booting Mac OS X and Ubuntu 2.7.1 Installing Mac OS X after Ubuntu 2.7.2 Installing Ubuntu after Mac OS X 2.7.3 Upgrading from older versions 2.7.4 Reinstalling applications after
    [Show full text]
  • Free and Open Source Software
    Free and open source software Copyleft ·Events and Awards ·Free software ·Free Software Definition ·Gratis versus General Libre ·List of free and open source software packages ·Open-source software Operating system AROS ·BSD ·Darwin ·FreeDOS ·GNU ·Haiku ·Inferno ·Linux ·Mach ·MINIX ·OpenSolaris ·Sym families bian ·Plan 9 ·ReactOS Eclipse ·Free Development Pascal ·GCC ·Java ·LLVM ·Lua ·NetBeans ·Open64 ·Perl ·PHP ·Python ·ROSE ·Ruby ·Tcl History GNU ·Haiku ·Linux ·Mozilla (Application Suite ·Firefox ·Thunderbird ) Apache Software Foundation ·Blender Foundation ·Eclipse Foundation ·freedesktop.org ·Free Software Foundation (Europe ·India ·Latin America ) ·FSMI ·GNOME Foundation ·GNU Project ·Google Code ·KDE e.V. ·Linux Organizations Foundation ·Mozilla Foundation ·Open Source Geospatial Foundation ·Open Source Initiative ·SourceForge ·Symbian Foundation ·Xiph.Org Foundation ·XMPP Standards Foundation ·X.Org Foundation Apache ·Artistic ·BSD ·GNU GPL ·GNU LGPL ·ISC ·MIT ·MPL ·Ms-PL/RL ·zlib ·FSF approved Licences licenses License standards Open Source Definition ·The Free Software Definition ·Debian Free Software Guidelines Binary blob ·Digital rights management ·Graphics hardware compatibility ·License proliferation ·Mozilla software rebranding ·Proprietary software ·SCO-Linux Challenges controversies ·Security ·Software patents ·Hardware restrictions ·Trusted Computing ·Viral license Alternative terms ·Community ·Linux distribution ·Forking ·Movement ·Microsoft Open Other topics Specification Promise ·Revolution OS ·Comparison with closed
    [Show full text]
  • Perl 5 Internals
    Perl 5 Internals Simon Cozens Perl 5 Internals by Simon Cozens Copyright © 2001 by NetThink Open Publications License 1.0 Copyright (c) 2001 by NetThink. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, v1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/). This series contains material adopted from the Netizen Perl Training Fork (http://spork.sourceforge.net/), by kind permission of Kirrily Robert. Table of Contents 1. Preliminaries ..............................................................................................................1 1.1. Course Outline ..................................................................................................1 1.2. Assumed Knowledge ........................................................................................1 1.3. Objectives..........................................................................................................2 1.4. The course notes ...............................................................................................2 2. Perl Development Structure......................................................................................1 2.1. Perl Versioning..................................................................................................1 2.2. The Development Tracks ..................................................................................1 2.3. Perl 5 Porters.....................................................................................................2
    [Show full text]
  • Awstats Logfile Analyzer Documentation
    AWStats logfile analyzer 7.0 Documentation Table of contents Enter your search terms Submit search form AWStats web and documentation Web Release Notes Reference manual What is AWStats / Features Install, Setup and Use AWStats New Features / Changelog Configuration Directives/Options Upgrade Configuration for Extra Sections feature Contribs, plugins and resources Other provided utilities AWStats Webmin admin module Glossary of terms Other Topics Comparison with other log analyzers FAQ and Troubleshooting Benchmarks AWStats License Plugin Developement Table of contents 1/96 22/06/2010 AWStats logfile analyzer 7.0 Documentation What is AWStats / Features Overview AWStats is short for Advanced Web Statistics. AWStats is powerful log analyzer which creates advanced web, ftp, mail and streaming server statistics reports based on the rich data contained in server logs. Data is graphically presented in easy to read web pages. Designed with flexibility in mind, AWStats can be run through a web browser CGI (common gateway interface) or directly from the operating system command line. Through the use of intermediary data base files, AWStats is able to quickly process large log files, as often desired. With support for both standard and custom log format definitions, AWStats can analyze log files from Apache (NCSA combined/XLF/ELF or common/CLF log format), Microsoft's IIS (W3C log format), WebStar and most web, proxy, wap and streaming media servers as well as ftp and mail server logs. See how the most famous open source statistics tools (AWStats, Analog, Webalizer) stack up feature by feature in this comparison table. AWStats is free software distributed under the GNU General Public License.
    [Show full text]
  • Advanced Design and Implementation of Virtual Machines
    Advanced Design and Implementation of Virtual Machines Advanced Design and Implementation of Virtual Machines Xiao-Feng Li CRC Press Taylor & Francis Group 6000 Broken Sound Parkway NW, Suite 300 Boca Raton, FL 33487-2742 © 2017 by Taylor & Francis Group, LLC CRC Press is an imprint of Taylor & Francis Group, an Informa business No claim to original U.S. Government works Printed on acid-free paper Version Date: 20160714 International Standard Book Number-13: 978-1-4665-8260-6 (Hardback) This book contains information obtained from authentic and highly regarded sources. Reasonable efforts have been made to publish reliable data and information, but the author and publisher cannot assume responsibility for the valid- ity of all materials or the consequences of their use. The authors and publishers have attempted to trace the copyright holders of all material reproduced in this publication and apologize to copyright holders if permission to publish in this form has not been obtained. If any copyright material has not been acknowledged please write and let us know so we may rectify in any future reprint. Except as permitted under U.S. Copyright Law, no part of this book may be reprinted, reproduced, transmitted, or uti- lized in any form by any electronic, mechanical, or other means, now known or hereafter invented, including photocopy- ing, microfilming, and recording, or in any information storage or retrieval system, without written permission from the publishers. For permission to photocopy or use material electronically from this work, please access www.copyright.com (http:// www.copyright.com/) or contact the Copyright Clearance Center, Inc.
    [Show full text]
  • Digging Down Into Perl Hood with the Debugger DIGGING DOWN INTO PERL
    @SW:Perl Debugger PROGRAMMING Perl: Perl Debugger Digging down into Perl hood with the debugger DIGGING DOWN INTO PERL www.sxc.hu The Perl interpreter, perl, doesn’t often crash, but if it happens, not even the excellent Perl debugger will be able to help you. To allow the debugger to map the BY MICHAEL SCHILLI functions to lines in the C source code, you need to compile Perl with the -g compiler flag for troubleshooting sup- f you program in Perl rather than in beds it dynamically in the script. The C port. When the Configure script prompts C or C++, you will probably be code after the __END__ tag sets a pointer you to decide which optimizer/debugger Igrateful for a few things that Perl to an address of 0xcba00000, and then flag should be used, say -g in response, takes off your hands: memory allocation, it tells the strcpy C function to overwrite or use the following Configure command counting references, watching out for the protected kernel address on ma- line: ./Configure -D optimize=-g -d. rogue pointers, freeing up memory – chines that use the 32-bit x86 architec- these labors of Sisyphus are offloaded ture. The CPU notices what happened Listing 1: crash from the developer's desk by Perl’s vir- to the script and triggers an interrupt, at 01 #!/usr/bin/perl -w tual machine, helping developers to keep which point the Linux kernel pulls the focused on the implementation. rug out from underneath the offending 02 use strict; Down below in the engine room, program’s feet.
    [Show full text]
  • First Steps in Perl
    First Steps In Perl Vitually all programming languages have certain things in common. The fundamental concepts of programming are the same, no matter what language you do them in. In this chapter, we'll investigate what you need to know before you start writing any programs at all. For instance: ❑ What is programming anyway? What does it mean to program? ❑ What happens to the program that we write? ❑ How do we structure programs and make them easy to understand? ❑ How do computers see numbers and letters? ❑ How do we find and eliminate errors in our programs? Of course, we'll be looking at these from a Perl perspective, and we'll look at a couple of basic Perl programs, and see how they're constructed and what they do. At the end of this chapter, I'm going to ask you to write a couple of simple Perl programs of your own. Programming Languages The first question I suppose we really should ask ourselves when we're learning programming is, 'What is programming?' That may sound particularly philosophical, but the answer is easy. Programming is telling a computer what you want it to do. The only trick, then, is to make sure that the program is written in a way the computer can understand. and to do this, we need to write it in a language that it can comprehend – a programming language, such as Perl. Writing a program does not require special skills, but it does call for a particular way of thinking. When giving instructions to humans, you take certain things for granted.
    [Show full text]
  • Java Bytecode Obfuscation
    JAVA BYTECODE OBFUSCATION by Michael R. Batchelder School of Computer Science McGill University, Montreal´ January 2007 A THESIS SUBMITTED TO THE FACULTY OF GRADUATE STUDIES AND RESEARCH IN PARTIAL FULFILLMENT OF THE REQUIREMENTS FOR THE DEGREE OF MASTER OF SCIENCE Copyright c 2007 by Michael R. Batchelder Abstract Programs written for machine execution will always be susceptible to information theft. This information can include trademarked algorithms, data embedded in the program, or even data the program accesses. As technology advances computer scientists are building more and more powerful tools for reverse-engineering such as decompilers. The Java programming language is particularly open to reverse-engineering attacks because of its well-defined, open, and portable binary format. We examine one area of better-securing the intellectual property of a Java program; obfuscation. Obfuscation of a program involves transforming the code of the program into a more complex, but semanti- cally equivalent representation. This can include the addition of confusing control flow, the removal of certain information embedded in the program which is not explicitly required for execution, or the cloaking of data. Obfuscation is one of the only techniques available other than cryptological options. While many approaches to obfuscation are ultimately reversible, it nevertheless seriously hinders those attempting to steal information by increasing the computing time and power required by software to reverse-engineer the program and also severely increases the com- plexity of any source code that is recovered by the reverse-engineering. In this thesis we present a number of obfuscating transformations implemented within a new automatic tool we name the Java Bytecode Obfuscator (JBCO).
    [Show full text]
  • Perljvm: Using B to Facilitate a Perl Port to the Java Virtual Machine
    perljvm: Using B to Facilitate a Perl Port To the Java Virtual Machine Bradley M. Kuhn Department of Electrical and Computer Engineering and Computer Science University of Cincinnati Cincinnati, OH 45219 [email protected] http://www.ebb.org/bkuhn Abstract perljvm is poised to be a functional JVM port of Perl. In designing perljvm, various ports of other languages to the JVM were studied and classified. Using this data, it was determined that Perl’s B (back-end) compiler modules provided the best path to accomplish a JVM port of Perl. Since the B modules provide access to to the internal representation (IR) used by the perl back-end, perljvm concerns itself only with translating that IR into JVM assembler, using the Jasmin assembler syntax. A JVM assembler code emitter module was developed to minimize perljvm’s dependence on Jasmin. To support Perl’s native data types on the JVM, equivalents for native Perl data structures must be designed and built in Java. Once perljvm is stable and most common Perl features are supported, work can begin on using the JVM as an object model to integrate Perl and Java objects seamlessly. At that time, integration with the JPL will be feasible. Introduction Perl is one of the most ported languages available for modern computing. However, Perl has yet to be ported to the Java Virtual Machine (JVM) architecture. Such a port of Perl is useful for the following reasons: • Many other very high level languages, including Ada, Eiffel, Java, Python, Scheme, and Tcl have working JVM ports. Perl must keep pace with its peers.
    [Show full text]