Scripting with Perl and Tcl - heim.ifi.uio. inf3330/materiell/perl.pdf · PDF file1.7 GUI...

Click here to load reader

  • date post

    26-Apr-2018
  • Category

    Documents

  • view

    213
  • download

    1

Embed Size (px)

Transcript of Scripting with Perl and Tcl - heim.ifi.uio. inf3330/materiell/perl.pdf · PDF file1.7 GUI...

  • Scripting with Perl and Tcl

    Hans Petter Langtangen

    Simula Research Laboratory

    and

    Department of Informatics

    University of Oslo

  • Table of Contents

    1 Introduction to Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.1 A Scientific Hello World Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    1.1.1 Reading and Writing Data Files . . . . . . . . . . . . . . . . . . . . . 31.1.2 The Complete Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.1.3 Dissection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.1.4 The Concept of Context in Perl . . . . . . . . . . . . . . . . . . . . . 7

    1.2 Automating Simulation and Visualization . . . . . . . . . . . . . . . . . . . 81.2.1 The Complete Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.2 Dissection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.3 Theres More Than One Way To Do It . . . . . . . . . . . . . . . . . . . . . . 121.3.1 A Script for Perl Beginners . . . . . . . . . . . . . . . . . . . . . . . . . 131.3.2 Using the Underscore Variable . . . . . . . . . . . . . . . . . . . . . . . 141.3.3 A Script Written in Typical Perl Style . . . . . . . . . . . . . . . . 141.3.4 Shorter Scripts for Lazy Programmers . . . . . . . . . . . . . . . . 151.3.5 The Ultimate Goal: Getting Rid of the Script File . . . . . 151.3.6 Perl Has a Grep Function Too . . . . . . . . . . . . . . . . . . . . . . . 15

    1.4 Frequently Encountered Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.4.1 Basic Control Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.4.2 File Reading and Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.4.3 Running an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.4.4 One-Line Perl Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.4.5 Array and List Operations . . . . . . . . . . . . . . . . . . . . . . . . . . 211.4.6 Hash Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.4.7 Splitting and Joining Text . . . . . . . . . . . . . . . . . . . . . . . . . . 251.4.8 Text Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.4.9 String Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261.4.10 Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.4.11 Subroutines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281.4.12 Nested, Heterogeneous Data Structures . . . . . . . . . . . . . . . 321.4.13 Testing a Variables Type . . . . . . . . . . . . . . . . . . . . . . . . . . . 331.4.14 Numerical Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341.4.15 Listing of Files in a Directory . . . . . . . . . . . . . . . . . . . . . . . 341.4.16 Testing File Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341.4.17 Copying and Renaming Files . . . . . . . . . . . . . . . . . . . . . . . . 351.4.18 Creating and Moving to Directories . . . . . . . . . . . . . . . . . . 361.4.19 Removing Files and Directories . . . . . . . . . . . . . . . . . . . . . . 361.4.20 Splitting Pathnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361.4.21 Traversing Directory Trees . . . . . . . . . . . . . . . . . . . . . . . . . . 371.4.22 Downloading Internet Files . . . . . . . . . . . . . . . . . . . . . . . . . . 381.4.23 CPU-Time Measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

  • 1.4.24 Programming with Classes . . . . . . . . . . . . . . . . . . . . . . . . . . 401.4.25 Debugging Perl Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401.4.26 Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421.4.27 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461.4.28 Building and Using Modules . . . . . . . . . . . . . . . . . . . . . . . . 491.4.29 Binary Input/Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

    1.5 Installing Perl and Additional Modules . . . . . . . . . . . . . . . . . . . . . . 521.5.1 Installing Basic Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521.5.2 Manual Installation of Perl Modules . . . . . . . . . . . . . . . . . . 521.5.3 Automatic Installation of Perl Modules . . . . . . . . . . . . . . . 531.5.4 The Required Perl Modules . . . . . . . . . . . . . . . . . . . . . . . . . 54

    1.6 Perl Versus Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541.6.1 Pythons Advantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541.6.2 Perls Advantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561.6.3 Efficiency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    1.7 GUI Programming with Perl/Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . 591.7.1 The First Perl/Tk Encounter . . . . . . . . . . . . . . . . . . . . . . . . 601.7.2 The Similarity of Python/Tkinter and Perl/Tk . . . . . . . . 621.7.3 Binding Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    1.8 Web Interfaces and CGI Programming . . . . . . . . . . . . . . . . . . . . . . 631.8.1 Web Versions of the Scientific Hello World Program . . . . 631.8.2 Debugging CGI Scripts in Perl with CGI::Debug . . . . . . . 651.8.3 Using Perls CGI Module to Construct Forms . . . . . . . . . 67

    2 Introduction to Tcl/Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.1 A Scientific Hello World Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    2.1.1 The Complete Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712.1.2 Dissection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

    2.2 Reading and Writing Data Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722.2.1 The Complete Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732.2.2 Dissection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732.2.3 Double Quotes, Braces, Brackets, and Variable Substi-

    tution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762.3 Automating Simulation and Visualization . . . . . . . . . . . . . . . . . . . 77

    2.3.1 The Complete Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772.3.2 Dissection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79

    2.4 Frequently Encountered Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812.4.1 File Reading and Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . 822.4.2 Running an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822.4.3 List Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832.4.4 Associative Array Operations . . . . . . . . . . . . . . . . . . . . . . . 842.4.5 Splitting and Joining Text . . . . . . . . . . . . . . . . . . . . . . . . . . 852.4.6 Text Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852.4.7 String Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862.4.8 Numerical Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

  • 2.4.9 Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 872.4.10 Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882.4.11 Listing of Files in a Directory . . . . . . . . . . . . . . . . . . . . . . . 912.4.12 Testing File Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912.4.13 Copying and Renaming Files . . . . . . . . . . . . . . . . . . . . . . . . 912.4.14 Creating and Moving to Directories . . . . . . . . . . . . . . . . . . 912.4.15 Removing Files and Directories . . . . . . . . . . . . . . . . . . . . . . 922.4.16 Splitting Pathnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922.4.17 Traversing Directory Trees . . . . . . . . . . . . . . . . . . . . . . . . . . 922.4.18 CPU-Time Measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . 932.4.19 Programming with Classes . . . . . . . . . . . . . . . . . . . . . . . . . . 932.4.20 Building and Using Packages . . . . . . . . . . . . . . . . . . . . . . . . 932.4.21 Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952.4.22 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95

    2.5 GUI Programming with Tcl/Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962.5.1 The First Tcl/Tk Encounter . . . . . . . . . . . . . . . . . . . . . . . . 972.5.2 Binding Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982.5.3 Widget Name Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992.5.4 The Similarity of Python/Tkinter and Tcl/Tk . . . . . . . . . 992.5.5 Using Variables in Widget Names . . . . . . . . . . . . . . . . . . . . 1002.5.6 Configuring Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012.5.7 The Grid Geometry Manager . . . . . . . . . . . . . . . . . . . . . . . . 102

  • Preface

    The purpose of this document is to show how the introductory programmingexamples from the book Python Scripting for Computational Science [?]can be implemented in Perl and Tcl. In addition, we list some core func-tionality of these scripting languages, typically corresponding to the sameinformation and examples as in Chapter 3Basic P