Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
14 views

Programming Ruby The Pragmatic Programmers Guide 2 nd edition Dave Thomas 2024 scribd download

Programming

Uploaded by

malittasiagc
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views

Programming Ruby The Pragmatic Programmers Guide 2 nd edition Dave Thomas 2024 scribd download

Programming

Uploaded by

malittasiagc
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 45

Download the full version of the ebook at

https://ebookgate.com

Programming Ruby The Pragmatic Programmers


Guide 2 nd edition Dave Thomas

https://ebookgate.com/product/programming-ruby-
the-pragmatic-programmers-guide-2-nd-edition-dave-
thomas/

Explore and download more ebook at https://ebookgate.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Programming Ruby 3 3 The Pragmatic Programmers Guide 5 /


converted Edition Noel Rappin

https://ebookgate.com/product/programming-ruby-3-3-the-pragmatic-
programmers-guide-5-converted-edition-noel-rappin/

ebookgate.com

Programming Ruby 1 9 3rd Edition Dave Thomas

https://ebookgate.com/product/programming-ruby-1-9-3rd-edition-dave-
thomas/

ebookgate.com

Pragmatic Thinking and Learning Refactor Your Wetware


Pragmatic Programmers 1st Edition Andy Hunt

https://ebookgate.com/product/pragmatic-thinking-and-learning-
refactor-your-wetware-pragmatic-programmers-1st-edition-andy-hunt/

ebookgate.com

Programming Elixir 1 3 Functional Concurrent Pragmatic Fun


1st Edition David Thomas

https://ebookgate.com/product/programming-elixir-1-3-functional-
concurrent-pragmatic-fun-1st-edition-david-thomas/

ebookgate.com
The Ruby Programming Language 1st Edition David Flanagan

https://ebookgate.com/product/the-ruby-programming-language-1st-
edition-david-flanagan/

ebookgate.com

Aspect Oriented Programming with the E Verification


Language A Pragmatic Guide for Testbench Developers David
Robinson
https://ebookgate.com/product/aspect-oriented-programming-with-the-e-
verification-language-a-pragmatic-guide-for-testbench-developers-
david-robinson/
ebookgate.com

Programming Cocoa with Ruby Create Compelling Mac Apps


Using RubyCocoa The Facets of Ruby Series 1st Edition
Brian Marick
https://ebookgate.com/product/programming-cocoa-with-ruby-create-
compelling-mac-apps-using-rubycocoa-the-facets-of-ruby-series-1st-
edition-brian-marick/
ebookgate.com

Programming Visual Basic NET 1st ed Edition Dave


Grundgeiger

https://ebookgate.com/product/programming-visual-basic-net-1st-ed-
edition-dave-grundgeiger/

ebookgate.com

OpenGL ES 2 0 Programming Guide 1st Edition Aaftab Munshi

https://ebookgate.com/product/opengl-es-2-0-programming-guide-1st-
edition-aaftab-munshi/

ebookgate.com
Developers the world over talk about
Programming Ruby and the Ruby language. . .
“Ruby is a wonderfully powerful and useful language, and whenever I’m working
with it, this book is at my side.”
Martin Fowler, Chief Scientist, ThoughtWorks

“If your world revolves around Java, as mine did, then you need this outstanding book
to learn all the wonderful things you’re missing. There’s just one catch: you’ll be
spoiled from then on. Indeed, after reading just a few pages of Programming Ruby,
programming in any language other than Ruby will feel like you’re pushing rope.”
Mike Clark, Author and Consultant

“Ruby is smart, elegant, and fun, and it deserves a book that’s smart, elegant, and fun.
The first edition of Programming Ruby was such a book; the second edition is even
better.”
James Britt, Administrator, http://ruby-doc.org

“The best reason to learn a new programming language is to learn to think differently.
The best way to learn to think the Ruby way is to read Programming Ruby. Several
years ago, with the first edition of this book, I did just that. Since then, I’ve had a
constant stream of enjoyable Ruby programming experiences. This is due in no
insignificant part to the quality of the source from which I learned the language. I’m
not the only person I’ve heard say that every language should have a book like this.”
Chad Fowler, Codirector, Ruby Central, Inc.

“The PickAxe got me started on Ruby. It is still the first book I turn to.”
Ryan Davis, Founder, Seattle.rb

“This book changed my life. Sounds rather clichéd, but it’s the truth. After six years
and 300,000 lines of Java code, I needed a change. That change occurred upon reading
the first edition of this book. With the support of a solid community and ever-growing
foundation of superb libraries, I founded a company that largely profits from applying
Ruby to solve real-world problems. Ruby is ready for prime time, and this new
version of the PickAxe will show a waiting world what a gem Ruby really is.”
Rich Kilmer, President and CEO, InfoEther LLC

“The first edition of PickAxe has been a desk-side companion for years. The second
edition will be an eagerly awaited replacement.”
Tom Enebo, JRuby Developer
“The first edition of Programming Ruby brought about no less than the introduction of
Ruby on a large scale outside of Japan, in the process becoming the de facto standard
published language reference and an oft-cited model of clear, effective technical
writing. The appearance of the second, expanded edition is exciting for Ruby
programmers around the world and will no doubt attract a fresh wave of newcomers to
this elegant, versatile language.”
David A. Black, Ph.D., Codirector, Ruby Central, Inc.

“Ruby is my definite choice for all scripting and prototyping issues, and this book will
help you to discover its usefulness as well as its beauty. Apart from that, it’s really fun
to read!”
Robert Klemme

“I bought the first edition of this book the day it was released and had a fantastic time
using it to learn Ruby. I eventually bought a second copy to keep at home. But Ruby
has changed since then. I’m delighted that this second edition of Programming Ruby
is available to help a new round of programmers learn about this fantastic, beautiful
language. And it’s not just good news for Ruby newbies, of course—like me, most
Ruby developers will want a copy (no, make that two) so that all of the details about
today’s Ruby will be close at hand.”
Glenn Vanderburg, Software Architect, Countrywide Financial

“Ruby is one of those great languages that takes an afternoon to start using and years
(maybe a lifetime) to master. In C, I’m always having to work around the limitations
of the language; in Ruby, I’m always discovering a neater, cleaner, more efficient way
to do things. Programming Ruby is the essential reference to the Ruby language. More
than just teaching you the syntax, it teaches you the spirit and the feel of the language.”
Ben Giddings

“Confucius said, “What you hear, you forget.” He also said, “What you do you
understand.” But it’s not easy to actually “do” things unless you’re using a great
language with strength in quick and clean prototyping. In my case, this language is
Ruby! Thank you!”
Michael Neumann
Programming Ruby
The Pragmatic Programmers’ Guide
Second Edition

Dave Thomas
with Chad Fowler
and Andy Hunt

The Pragmatic Bookshelf


Raleigh, North Carolina Dallas, Texas
Many of the designations used by manufacturers and sellers to distinguish their products are claimed as
trademarks. Where those designations appear in this book, and The Pragmatic Programmers, LLC, was aware
of a trademark claim, the designations have been printed in initial capital letters or in all capitals.

Every precaution was taken in the preparation of this book. However, the publisher assumes no responsibility
for errors or omissions or for damages that may result from the use of information (including program
listings) contained herein.

This book is a heavily revised version of the book Programming Ruby, originally published by Addison
Wesley. This book is printed with their permission.

Our Pragmatic courses, workshops, and other products can help you and your team create better software
and have more fun. For more information, as well as the latest Pragmatic titles, please visit us at

http://www.pragmaticprogrammer.com

Copyright © 2005 The Pragmatic Programmers, LLC. All rights reserved. No part of this publication may be
reproduced, stored in a retrieval system, or transmitted, in any form, or by any means, electronic, mechanical,
photocopying, recording, or otherwise, without the prior consent of the publisher.

Printed in the United States of America.

ISBN 0-9745140-5-5
Text printed on acid-free paper.
First Printing, October 2004
Version: 2004-9-30
Contents
F OREWORD TO THE F IRST E DITION xvii
F OREWORD TO THE S ECOND E DITION xix
P REFACE xx
ROAD M AP xxvi

PART I—FACETS OF R UBY


1 G ETTING S TARTED 2
Installing Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
Running Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Ruby Documentation: RDoc and ri . . . . . . . . . . . . . . . . . . . . . 7

2 RUBY. NEW 9
Ruby Is an Object-Oriented Language . . . . . . . . . . . . . . . . . . . 9
Some Basic Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Arrays and Hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Blocks and Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Reading and ’Riting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Onward and Upward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

3 C LASSES , O BJECTS , AND VARIABLES 23


Inheritance and Messages . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Objects and Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Class Variables and Class Methods . . . . . . . . . . . . . . . . . . . . . 31
Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Prepared exclusively for Yeganefar v


CONTENTS vi

4 C ONTAINERS , B LOCKS , AND I TERATORS 40


Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Blocks and Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Containers Everywhere . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

5 S TANDARD T YPES 55
Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Ranges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Regular Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

6 M ORE ABOUT M ETHODS 74


Defining a Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Calling a Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

7 E XPRESSIONS 81
Operator Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Miscellaneous Expressions . . . . . . . . . . . . . . . . . . . . . . . . . 83
Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Conditional Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Case Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Variable Scope, Loops, and Blocks . . . . . . . . . . . . . . . . . . . . . 99

8 E XCEPTIONS , C ATCH , AND T HROW 101


The Exception Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Handling Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Raising Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Catch and Throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

9 M ODULES 110
Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Mixins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Iterators and the Enumerable Module . . . . . . . . . . . . . . . . . . . . 113
Composing Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Including Other Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

10 BASIC I NPUT AND O UTPUT 119


What Is an IO Object? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Opening and Closing Files . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Reading and Writing Files . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Talking to Networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

Prepared exclusively for Yeganefar


CONTENTS vii

11 T HREADS AND P ROCESSES 127


Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Controlling the Thread Scheduler . . . . . . . . . . . . . . . . . . . . . . 132
Mutual Exclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Running Multiple Processes . . . . . . . . . . . . . . . . . . . . . . . . . 139

12 U NIT T ESTING 143


Test::Unit Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Structuring Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Organizing and Running Tests . . . . . . . . . . . . . . . . . . . . . . . . 151

13 W HEN T ROUBLE S TRIKES 155


Ruby Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Interactive Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Editor Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
But It Doesn’t Work! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
But It’s Too Slow! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162

PART II—R UBY IN I TS S ETTING


14 RUBY AND I TS W ORLD 167
Command-Line Arguments . . . . . . . . . . . . . . . . . . . . . . . . . 167
Program Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Environment Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
Where Ruby Finds Its Modules . . . . . . . . . . . . . . . . . . . . . . . 172
Build Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173

15 I NTERACTIVE RUBY S HELL 174


Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
rtags and xmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

16 D OCUMENTING RUBY 187


Adding RDoc to Ruby Code . . . . . . . . . . . . . . . . . . . . . . . . . 187
Adding RDoc to C Extensions . . . . . . . . . . . . . . . . . . . . . . . . 195
Running RDoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Displaying Program Usage . . . . . . . . . . . . . . . . . . . . . . . . . 200

Prepared exclusively for Yeganefar


CONTENTS viii

17 PACKAGE M ANAGEMENT WITH RUBY G EMS 203


Installing RubyGems . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Installing Application Gems . . . . . . . . . . . . . . . . . . . . . . . . . 204
Installing and Using Gem Libraries . . . . . . . . . . . . . . . . . . . . . 206
Creating Your Own Gems . . . . . . . . . . . . . . . . . . . . . . . . . . 211

18 RUBY AND THE W EB 222


Writing CGI Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
Improving Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Choice of Web Servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
SOAP and Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
More Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

19 RUBY T K 241
Simple Tk Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Binding Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Scrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Translating from Perl/Tk Documentation . . . . . . . . . . . . . . . . . . 251

20 RUBY AND M ICROSOFT W INDOWS 253


Getting Ruby for Windows . . . . . . . . . . . . . . . . . . . . . . . . . 253
Running Ruby Under Windows . . . . . . . . . . . . . . . . . . . . . . . 254
Win32API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
Windows Automation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

21 E XTENDING RUBY 261


Your First Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Ruby Objects in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
The Jukebox Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
Memory Allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Ruby Type System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
Creating an Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Embedding a Ruby Interpreter . . . . . . . . . . . . . . . . . . . . . . . . 287
Bridging Ruby to Other Languages . . . . . . . . . . . . . . . . . . . . . 290
Ruby C Language API . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

Prepared exclusively for Yeganefar


CONTENTS ix

PART III—R UBY C RYSTALLIZED


22 T HE RUBY L ANGUAGE 302
Source Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
The Basic Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Variables and Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Predefined Variables . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Boolean Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . 326
if and unless Expressions . . . . . . . . . . . . . . . . . . . . . . . 328
case Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Loop Constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Method Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
Invoking a Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Aliasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Class Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Module Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Blocks, Closures, and Proc Objects . . . . . . . . . . . . . . . . . . . . . 341
Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Catch and Throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

23 D UCK T YPING 349


Classes Aren’t Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Coding like a Duck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Standard Protocols and Coercions . . . . . . . . . . . . . . . . . . . . . . 355
Walk the Walk, Talk the Talk . . . . . . . . . . . . . . . . . . . . . . . . 361

24 C LASSES AND O BJECTS 362


How Classes and Objects Interact . . . . . . . . . . . . . . . . . . . . . . 362
Class and Module Definitions . . . . . . . . . . . . . . . . . . . . . . . . 370
Top-Level Execution Environment . . . . . . . . . . . . . . . . . . . . . 376
Inheritance and Visibility . . . . . . . . . . . . . . . . . . . . . . . . . . 376
Freezing Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

25 L OCKING RUBY IN THE S AFE 379


Safe Levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Tainted Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

Prepared exclusively for Yeganefar


CONTENTS x

26 R EFLECTION , O BJECT S PACE , AND D ISTRIBUTED RUBY 384


Looking at Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Looking at Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
Calling Methods Dynamically . . . . . . . . . . . . . . . . . . . . . . . . 388
System Hooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Tracing Your Program’s Execution . . . . . . . . . . . . . . . . . . . . . 393
Marshaling and Distributed Ruby . . . . . . . . . . . . . . . . . . . . . . 395
Compile Time? Runtime? Anytime! . . . . . . . . . . . . . . . . . . . . . 400

PART IV—R UBY L IBRARY R EFERENCE


27 BUILT- IN C LASSES AND M ODULES 402
Alphabetical Listing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
Bignum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
Binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
Comparable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
Continuation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Dir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
Enumerable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
Errno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
Exception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
FalseClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
File::Stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
FileTest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Fixnum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Float . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
GC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
IO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482
Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
Marshal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
MatchData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
NilClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
Numeric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541

Prepared exclusively for Yeganefar


CONTENTS xi

Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546
ObjectSpace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
Proc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
Process::GID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
Process::Status . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
Process::Sys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
Process::UID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
Range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
Regexp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
Signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583
String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585
Struct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
Struct::Tms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
Symbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
ThreadGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
TrueClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
UnboundMethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630

28 S TANDARD L IBRARY 632


Abbrev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
Base64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
Benchmark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636
BigDecimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
CGI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
CGI::Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
Complex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
Curses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643
Date/DateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644
DBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
Delegator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
Digest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647
DL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648
dRuby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
English . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
Enumerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
erb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
Etc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
expect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
Fcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656

Prepared exclusively for Yeganefar


CONTENTS xii

FileUtils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
Forwardable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
ftools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
GDBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662
GetoptLong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663
GServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
Iconv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
IO/Wait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
IPAddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
jcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
Logger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
mathn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674
Mutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
Mutex_m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
Net::FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677
Net::HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678
Net::IMAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680
Net::POP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
Net::SMTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682
Net::Telnet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
NKF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
Observable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
open-uri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
Open3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
OpenStruct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689
OptionParser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
ParseDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
Pathname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
PP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694
PrettyPrint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
Profile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696
Profiler_ _ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
PStore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698
PTY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
Rational . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
readbytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
Readline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702

Prepared exclusively for Yeganefar


CONTENTS xiii

Resolv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703
REXML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704
Rinda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706
RSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
Scanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
SDBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710
Shellwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711
Singleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
SOAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
StringIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
StringScanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
Sync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
Syslog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719
Tempfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
Test::Unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
ThreadsWait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
Timeout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725
Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726
tmpdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727
Tracer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
TSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729
un . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730
URI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731
WeakRef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732
WEBrick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
Win32API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
WIN32OLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
XMLRPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
YAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
Zlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738

Prepared exclusively for Yeganefar


CONTENTS xiv

PART V—A PPENDIXES


A S OCKET L IBRARY 740
BasicSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
IPSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747
TCPSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748
SOCKSSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
TCPServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750
UDPSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
UNIXSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753
UNIXServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754

B MKMF R EFERENCE 755


mkmf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755

C S UPPORT 758
Web Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
Download Sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
Usenet Newsgroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
Mailing Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759

D B IBLIOGRAPHY 761

I NDEX 762

S UMMARY TABLES 797

Prepared exclusively for Yeganefar


List of Tables
2.1 Example variable and class names . . . . . . . . . . . . . . . . . . . . 15
5.1 Character class abbreviations . . . . . . . . . . . . . . . . . . . . . . . 68
7.1 Common comparison operators . . . . . . . . . . . . . . . . . . . . . . 89
11.1 Two threads in a race condition . . . . . . . . . . . . . . . . . . . . . . 135
13.1 Debugger commands . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
14.1 Environment variables used by Ruby . . . . . . . . . . . . . . . . . . . 172
15.1 irb command-line options . . . . . . . . . . . . . . . . . . . . . . . . . 175
17.1 Version operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
18.1 Command-line options for erb . . . . . . . . . . . . . . . . . . . . . . 230
21.1 C/Ruby data type conversion functions and macros . . . . . . . . . . . 266
22.1 General delimited input . . . . . . . . . . . . . . . . . . . . . . . . . . 304
22.2 Substitutions in double-quoted strings . . . . . . . . . . . . . . . . . . 306
22.3 Reserved words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
22.4 Ruby operators (high to low precedence) . . . . . . . . . . . . . . . . . 324
25.1 Definition of the safe levels . . . . . . . . . . . . . . . . . . . . . . . . 383
27.1 Class Array: pack directives . . . . . . . . . . . . . . . . . . . . . . . 414
27.2 Class File: match-mode constants . . . . . . . . . . . . . . . . . . . . 447
27.3 Class File: path separators . . . . . . . . . . . . . . . . . . . . . . . . 449
27.4 Class File: open-mode constants . . . . . . . . . . . . . . . . . . . . . 451
27.5 Class File: lock-mode constants . . . . . . . . . . . . . . . . . . . . . 455
27.6 Class IO: mode strings . . . . . . . . . . . . . . . . . . . . . . . . . . 483
27.7 Module Kernel: sprintf flag characters . . . . . . . . . . . . . . . . 510
27.8 Module Kernel: sprintf field types . . . . . . . . . . . . . . . . . . . 511
27.9 Module Kernel: file tests with a single argument . . . . . . . . . . . . 512
27.10 Module Kernel: file tests with two arguments . . . . . . . . . . . . . . 512
27.11 Class Numeric: methods and subclasses . . . . . . . . . . . . . . . . . 543
27.12 Class Numeric: divmod, modulo, and remainder . . . . . . . . . . . . 544
27.13 Class String: backslash sequences in substitution strings . . . . . . . . 593
27.14 Class String: unpack directives . . . . . . . . . . . . . . . . . . . . . 603
27.15 Class Time: strftime directives . . . . . . . . . . . . . . . . . . . . . 627
28.1 Class ERB: inline directives . . . . . . . . . . . . . . . . . . . . . . . . 653
28.2 Class OptionParser: option definitions . . . . . . . . . . . . . . . . . 691

Prepared exclusively for Yeganefar xv


List of Figures
3.1 Variables hold object references. . . . . . . . . . . . . . . . . . . . . . 39
4.1 How arrays are indexed . . . . . . . . . . . . . . . . . . . . . . . . . . 42
8.1 Ruby exception hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . 103
12.1 Roman numerals generation (with bugs) . . . . . . . . . . . . . . . . . 145
12.2 Test::Unit assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
13.1 Sample irb session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
13.2 Comparing variable access costs using benchmark . . . . . . . . . . . . 163
16.1 Browse RDoc output for class counter . . . . . . . . . . . . . . . . . . 188
16.2 Browse RDoc output when source has comments . . . . . . . . . . . . 189
16.3 Using ri to read documentation . . . . . . . . . . . . . . . . . . . . . . 190
16.4 Document for class Proc generated by RDoc/ri . . . . . . . . . . . . . 191
16.5 Ruby source file documented with RDoc . . . . . . . . . . . . . . . . . 196
16.6 C source file documented with RDoc . . . . . . . . . . . . . . . . . . . 198
16.7 Sample program using RDoc::usage . . . . . . . . . . . . . . . . . . . 201
16.8 Help generated by sample program . . . . . . . . . . . . . . . . . . . . 202
17.1 MomLog package structure . . . . . . . . . . . . . . . . . . . . . . . . 220
18.1 Sample CGI Form . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
18.2 Erb processing a file with loops . . . . . . . . . . . . . . . . . . . . . . 232
19.1 Drawing on a Tk Canvas . . . . . . . . . . . . . . . . . . . . . . . . . 248
21.1 Wrapping objects around C data types . . . . . . . . . . . . . . . . . . 272
21.2 Building an extension . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
22.1 State transitions for boolean range . . . . . . . . . . . . . . . . . . . . 327
24.1 A basic object, with its class and superclass . . . . . . . . . . . . . . . 363
24.2 Adding a metaclass to Guitar . . . . . . . . . . . . . . . . . . . . . . 364
24.3 Adding a virtual class to an object . . . . . . . . . . . . . . . . . . . . 367
24.4 An included module and its proxy class . . . . . . . . . . . . . . . . . 369
27.1 Standard exception hierarchy . . . . . . . . . . . . . . . . . . . . . . . 441
27.2 Method#arity in action . . . . . . . . . . . . . . . . . . . . . . . . . 523

Prepared exclusively for Yeganefar xvi


Foreword to the
First Edition
Man is driven to create; I know I really love to create things. And while I’m not good
at painting, drawing, or music, I can write software.
Shortly after I was introduced to computers, I became interested in programming lan-
guages. I believed that an ideal programming language must be attainable, and I wanted
to be the designer of it. Later, after gaining some experience, I realized that this kind of
ideal, all-purpose language might be more difficult than I had thought. But I was still
hoping to design a language that would work for most of the jobs I did everyday. That
was my dream as a student.
Years later I talked with colleagues about scripting languages, their power and possi-
bility. As an object-oriented fan for more than fifteen years, it seemed to me that OO
programming was very suitable for scripting too. I did some research on the ’net for a
while, but the candidates I found, Perl and Python, were not exactly what I was look-
ing for. I wanted a language more powerful than Perl and more object-oriented than
Python.
Then, I remembered my old dream and decided to design my own language. At first I
was just toying around with it at work. But gradually it grew to be a tool good enough
to replace Perl. I named it Ruby—after the precious red stone—and released it to the
public in 1995.
Since then a lot of people have become interested in Ruby. Believe it or not, Ruby is
actually more popular than Python in Japan right now. I hope that eventually it will be
just as well received all over the world.
I believe that the purpose of life is, at least in part, to be happy. Based on this belief,
Ruby is designed to make programming not only easy but also fun. It allows you to
concentrate on the creative side of programming, with less stress. If you don’t believe
me, read this book and try Ruby. I’m sure you’ll find out for yourself.
I’m very thankful to the people who have joined the Ruby community; they have helped
me a lot. I almost feel like Ruby is one of my children, but in fact, it is the result of the

Prepared exclusively for Yeganefar xvii


F OREWORD xviii

combined efforts of many people. Without their help, Ruby could never have become
what it is.
I am especially thankful to the authors of this book, Dave Thomas and Andy Hunt.
Ruby has never been a well-documented language. Because I have always preferred
writing programs over writing documents, the Ruby manuals tend to be less thorough
than they should be. You had to read the source to know the exact behavior of the
language. But now Dave and Andy have done the work for you.
They became interested in a lesser-known language from the Far East. They researched
it, read thousands of lines of source code, wrote uncountable test scripts and e-mails,
clarified the ambiguous behavior of the language, found bugs (and even fixed some of
them), and finally compiled this great book. Ruby is certainly well documented now!
Their work on this book has not been trivial. While they were writing it, I was modi-
fying the language itself. But we worked together on the updates, and this book is as
accurate as possible.
It is my hope that both Ruby and this book will serve to make your programming easy
and enjoyable. Have fun!

Yukihiro Matsumoto, a.k.a. “Matz”

Japan, October 2000

Prepared exclusively for Yeganefar


Foreword to the
Second Edition
No one in 1993 would have believed that an object-oriented language created by a
Japanese amateur language designer would end up being used worldwide and that the
language would become almost as popular as Perl. It was insane. I admit that. I didn’t
believe it either.
But it happened, far exceeding my expectations. It was caused—at least in part—by
the first edition of this book. The famous Pragmatic Programmers chose a dynamic
language that was virtually unknown to anyone outside of Japan and wrote a good
book about it. It was just like a miracle.
That’s now history. The future starts now. We have the second edition of Programming
Ruby, which is better than the first one. It’s no longer a miracle. This time, the grown-
up Ruby community helped to develop the book. I just needed to sit and watch the
community working together.
I really appreciate the Pragmatic Programmers, Dave Thomas and Andy Hunt, and
other people from the community who helped with this book (guys, sorry for not nam-
ing you personally). I love the friendliness of the Ruby community. It’s the best soft-
ware community I have ever seen. I also appreciate every programmer in the world who
uses Ruby.
The stone has started rolling. It will became a great mountain and fill the whole earth.

Yukihiro Matsumoto, a.k.a. “Matz”

Japan, August 2004

Prepared exclusively for Yeganefar xix


Another random document with
no related content on Scribd:
So hörte er denn auch kaum hin, wie der Pastor die Eltern und
Großeltern tröstete, wie er ein blaß gehaltenes Bild der in der Blüte
geknickten lieblichen Jungfrau entwarf. Was ging ihn das alles an?
Was konnte der Pastor von der Toten wissen, die nur ein Vierteljahr
seiner großen und zerstreuten Gemeinde angehört hatte, mit der er
wohl nie ein Wort gewechselt hatte? —
Aber plötzlich traf ein Wort von der Kanzel sein Ohr, das ihn
aufmerken ließ. Der Pastor hatte von einem goldenen Tor geredet.
Wie kam der Mann dazu, von etwas zu reden, was zwischen ihr,
deren Mund nun geschlossen war, und ihm heiligstes Geheimnis
war? Und nun horchte er mit angehaltenem Atem. »Die
Entschlafene,« so führte der Geistliche aus, »hat sich in ihren
Fieberträumen immer wieder mit einem goldenen Tore beschäftigt,
so ist mir gesagt worden. Und dann hat sie mit einem Begleiter
gesprochen, der an ihrer Seite dem goldenen Tore zugewandert ist.
Was, meint ihr, liebe Christen, ist das für ein Wandergenosse
gewesen? Ich zweifle nicht daran, es war ein heiliger Engel, den
Gott der Herr ihr zum Geleite gegeben, um sie aus dem dunklen Tal
der Todesschatten durch das goldene Tor hinaufzuführen in das
Land des ewigen Lichts.«
Durch die Gemeinde ging ein lautes Schluchzen.
Wenn einer hinter den Pfeiler geblickt hätte, und er hätte die
rechten Augen gehabt, so würde er da ein Menschenantlitz gesehen
haben, das für einen Augenblick von tiefinnerer Seligkeit
durchleuchtet war. Und vielleicht hätte er da an ein Engelsantlitz
denken müssen. —
Die Trauerfeier war beendet. Die Verwandten traten noch einmal
an das Grab, die andern kehrten nach der Sitte zu kurzer Rast in
dem nahen Wirtshause ein. Peter aber machte sich sofort auf den
Heimweg. Er mußte allein sein.
Langsam ging er über die weite, stille, blühende Heide, und
dachte mit stiller, tiefer Wehmut der glücklichen Zeiten. Er hatte das
Gefühl, als ob sie weit, weit hinter ihm lägen. Und doch lagen nur
drei Tage dazwischen. Aber was für Tage! ... Und wie lange war es
her, daß er an ihrer Seite den Weg gegangen war? Es waren fünf
Wochen. Da wurde er auf einmal zweifelhaft. War er nicht zweimal
mit ihr diesen Weg gewandert? Einmal am letzten Sonntagabend vor
den Ferien. Dessen erinnerte er sich ganz deutlich. Da hatte er ihr ja
die Geschichte vom goldenen Tore erzählt, und sie hatten sich
versprochen, von nun an Wandergenossen zu bleiben. Aber es war
ihm, als müßte er noch ein zweites Mal mit ihr dieses Weges
gegangen sein ... Allmählich dämmerte ihm herauf, was er vor drei
Tagen, in jenem merkwürdigen Zustande jenseits der Schwelle des
wachen Bewußtseins, auf diesem Wege erlebt hatte. Er hatte sich
dieses Erlebnisses seither nicht erinnert, wohl deshalb, weil es in
Regionen des Unterbewußtseins vor sich gegangen war, die dem
vom Willen abhängigen Sicherinnern nicht zugänglich sind. Jetzt, an
dem Orte, wo es ihm begegnet war, bei dem lebhaften und innigen
Denken an jene erste Wanderung, kam es herauf, traumhaft
verschleiert ... Hatte er sie da nicht an seiner Seite schweben
sehen? ... In langem, weißem Kleide? ... schnell und immer schneller
dem goldenen Tore zu? ... Das mußte um die Stunde ihres letzten
Kampfes gewesen sein ... Also um dieselbe Stunde, da sie, wie die
Verwandten dem Pastor berichtet hatten, das goldene Tor offen und
den Wandergefährten an ihrer Seite gesehen hatte ... Wunderbar ...
Während sie mit dem Tode ringend auf ihrem Bette lag, und während
er zerschlagen und seiner selbst nicht mächtig über die Heide ging,
hatte da zwischen ihren Seelen ein geheimnisvoller Verkehr
stattgefunden? ... Hatten die einander geschaut, gegrüßt,
aneinander Geleit und Halt und Freude gefunden? ... War das
denkbar? ... Denkbar wohl nicht ... aber vielleicht trotzdem Wahrheit
... Je länger er darüber nachsann oder vielmehr -fühlte, um so
gewisser wurde es ihm. Dann aber war es ja sicher, daß ihre Liebe
nicht an das leibliche Beieinander gebunden war ... daß sie
Weggenossen bleiben konnten, auch wenn sie ihm vorausgeeilt war
... Und hatte sie nicht auch, ehe sie in dem goldenen Tore
verschwand, auf den Weg, der deutlich vor ihm lag, gewiesen und
ihm gewinkt? ... um ihm zu zeigen, daß sie denselben Weg hatten
und zusammengehörten? ...
Er dachte an seine Mutter. Die hatte ihm, obgleich sie so früh
hinweggerissen war, durch die ganze Kindheit das Geleit gegeben.
Ganz gewiß, dann konnte auch die jetzt ihm entrissene, aber durch
die engsten Seelenbande ihm verbundene Weggefährtin seine
Weggefährtin bleiben, das Stück Weges, das er noch vor sich hatte.
Vielleicht war dieses ja auch gar nicht so lang, wie er ihr das vor fünf
Wochen in seinem jungen, frohen Lebensmut ausgemalt hatte.
Vielleicht mußte er in Beziehung auf das goldene Tor noch einmal
umlernen. Am Ende hatte sie doch recht gehabt, als sie damals,
wohl vorahnend, sagte: »Aber Peter, wenn wir in das goldene Tor
hineinwollen, dann müssen wir ja vorher — sterben.« Damals war er
darüber erschrocken und hatte das Sterben ganz ans Ende gesetzt,
nach all dem Großen und Schönen, das er vorher erreichen wollte.
Aber wenn es früher käme, wäre denn das so schlimm? ... Und
vielleicht kam's ja auch so. Er dachte an die Besorgnis seines
Vaters, daß er, Peter, zu viel von der Mutter geerbt haben möchte
und in keiner guten Haut steckte. Und der dumpfe Schmerz in seiner
Brust war ja seit jenem rasenden Laufen nach dem Arzt immer noch
nicht ganz gewichen ...
Ein Lächeln huschte über sein Gesicht. Er dachte wieder an die
Begräbnispredigt. Was? Er, der Schulmeister Peter Eggers, ein
Engel? Das war wirklich zum Lachen. Aber plötzlich wurde sein
Gesicht wieder ernst. Ja, s i e, wie sie da in weißem, wallendem
Kleide neben ihm schwebte, wie sie am Ziel das von innen
durchleuchtete Antlitz nach ihm zurückwandte, s i e hatte wie ein
Engel ausgesehen. Und war sie überhaupt nicht in sein armes,
einsames, dumpfes Leben wie ein Engel aus einer andern Welt
hineingetreten? Hatte er nicht eines Abends in duftender
Jelängerjelieberlaube gesessen und Gott gedankt, daß er sie ihm
gegeben? ...
Gefaßt und getröstet langte Peter am Schulhause an. Als er aber
eintrat und auf der Diele die drei Stühle sah, die den Sarg getragen
hatten, und als sein Blick in ihre offene Kammer fiel, in der eben die
einhütende Nachbarsfrau Ordnung schaffte, da übermannte ihn der
Schmerz aufs neue. Er hielt die Hand vors Gesicht, eilte die Treppe
hinauf und warf sich auf sein Bett.
Die Nachbarsfrau hatte es auch übernommen, für die von der
Beerdigung Zurückkehrenden den Kaffee zu kochen. Als sie sah,
daß Peter zurück war, goß die gute Seele ihm vorab eine Tasse auf,
legte ein Stück Butterkuchen auf den Rand und trug's ihm hinauf.
Sie fand den jungen Schulmeister auf dem Bette liegend, den Kopf
in die Kissen vergraben.
Da faßte sie ihn mütterlich am Arm, schüttelte ihn und sagte: »He!
Wat fehlt em? Is he krank?«
Peter flog erschrocken in die Höhe und sah die Frau hohläugig
und verstört an.
»Hier hett he'n Tass' Kaffee ... Wat? He hett weent? Achjajija, dat
junge söte Lewen« — die Frau führte mit der freien Hand die
Schürze an die Augen — »in düsse Johren, wenn eene so väl köst[8]
hett und just to bruken is, huhuhu. Aber se is ja den besten Weg,
huhu. Nu drink he man. So'n Tass' Kaffee helpt den Menschen
wedder up.«
Peter nahm die Tasse und setzte sich auf seinen Stuhl. Die Frau
stand neben ihm, hatte die Schürze wieder fallen lassen und die
Hände in die Seiten gestemmt.
»Hett se 'ne schöne Liekenred' krägen?« fragte sie.
»Och ja,« sagte Peter.
»Wat for'n Text?«
»Text? ... de Text? ... Mewsmudder, dat weet ich würklich nicht.«
»Wat? 'n Scholmester, und denn so vergätern?« sagte
Mewsmutter verwundert. »Ick hew noch alle Liekentexte von mine
Fründschap in'n Kopp.« Und nun zählte sie ihm die der letzten
zwanzig Jahre auf, gab auch bei mehreren einige Gedanken aus der
über sie gehaltenen Rede wieder. Dabei weinte sie noch einmal über
die Verluste und ließ sich noch einmal von all den schönen Texten
trösten. Zuletzt wischte sie sich mit der Schürze die Augen,
schnaubte sich in derselben gründlich aus, nahm die leere Tasse
und ging wieder an ihre Arbeit.
Peter sah ihr kopfschüttelnd nach. Wie waren solche Leute zu
beneiden! Die weinten ihre Tränen, backten Butterkuchen, hörten
eine schöne Leichenpredigt, kochten Kaffee und gingen wieder an
ihre Arbeit.
Und gingen wieder an ihre Arbeit. Ja, und das tat Peter am andern
Morgen auch. Es blieb ihm nichts anderes übrig. Denn die kleinen
Wehlinger Jungens und Deerns wollten darum doch lesen und
schreiben und rechnen lernen, wenn Peter auch ein wehes,
zerrissenes Herz hatte. Sie stellten sich am nächsten Morgen wieder
vollzählig ein. Auf dem Schulhofe waren sie wohl etwas stiller als
sonst. Aber ihr Morgenlied sangen sie mit kräftigen Stimmen, und
die beiden Lehrer hatten alle Hände voll zu tun. Denn die Jugend
hatte beim Heu viel verschwitzt und war durch die lange Freiheit des
Stillsitzens auf den Schulbänken entwöhnt.
Am Mittagstisch sagte der Schulmeister, indem er sich ein wenig
reckte: »Wie ist das gut, daß wir endlich so weit sind! So etwas
bringt immer viel Aufregung mit sich, und die ist nichts für alte Leute.
Gott sei Dank, daß nun alles wieder im alten Geleise ist.«
Ja, alles wieder im alten Geleise. Auch den leergewordenen Platz
am Tische fand Peter nach drei Tagen wieder besetzt. Beim
Familienkaffee nach der Beerdigung war die Verabredung getroffen,
daß der Schulmeistersleute ältester Sohn seine älteste Tochter der
schwächlichen Mutter zur Hilfe im Haushalt schicken sollte. Diese
hieß auch Marie, und war ein munteres, quickes, junges Ding mit
lebenshungrigen Augen und runden Gliedern.
Die neue Marie langweilte sich bald bei den grämlichen Alten und
suchte Zeitvertreib bei Peter. Wenn die beiden, durch eine
Wiederholung der Rede des Schulmeisters vom Zeitvertrödeln und
von der Unschicklichkeit getrennt, im Garten Sommerarbeit taten,
war sie alle Viertelstunden bei ihm und hatte bald dies zu fragen und
bald das zu schwatzen. Das »Es schickt sich nicht für so'n großes
Mädchen« des Schulmeisters war für sie nicht da. Peter hörte ihrem
munteren Geplauder ganz gern zu, und da ihre in das dumpfe
Schulhaus eingezwängte Lebenslust ihn dauerte, so war er immer
freundlich gegen sie und zwang sich, auf ihre Interessen
einzugehen, auch wenn ihm danach nicht gerade zumute war. Aber
das genügte ihr nicht. Und als sie merkte, daß sie ihm durch Äugeln
und andere Kunststückchen nicht mehr abgewinnen konnte,
versuchte sie's mit einem Bauernsohn auf der Nachbarschaft, wo sie
mehr Glück hatte. Sie ist dann nach einem guten Jahre aus dem
grämlichen Schulhause als Herrin auf den schönen Bauernhof
übergesiedelt und eine kleine dicke, fröhliche, tüchtige Bauerfrau
geworden.
Eines Nachmittags gegen Ende September, als Peter Birnen
pflückte, kam sie angetänzelt und bat ihn, ihr bei dem Ausziehen der
Bohnenstangen zu helfen. Das trockene Kraut hätte sie schon zum
größten Teil heruntergerissen. Aber die Querstangen lägen ihr zu
hoch. Da könnte ein so kurzes End wie sie nicht heranreichen. Peter
verbarg sein Gesicht hinter einem Birnenast und sagte: »Marie, das
laß nur. Das will ich wohl gegen Abend allein besorgen.« »Du bist zu
nett, Peter,« sagte sie erfreut, »dann kann ich ja gleich hingehen und
mich hübsch machen. Aber vorher schmeiß mir eine süße, gelbe
Birne herunter!« Peter erfüllte ihren Wunsch, und sie ging, herzhaft
die Zähne in die Frucht schlagend, davon.
Am Abend, als der müde Herbstsonnenschein auf dem Garten lag,
machte Peter sich daran, das Werk des leuchtenden Mainachmittags
niederzulegen. Er zog Mariens Schleifen auf und löste seine Knoten.
Dann zog er die fest in der Erde steckenden Stangen heraus, erst
seine Reihe, dann ihre. Als sie alle auf dem Haufen lagen, setzte er
sich darauf und hielt den Kopf in die Hände gestützt. So saß er eine
ganze Weile. Dann stand er auf und begann, die Stangen ins Haus,
zu tragen. Einst hatte er je acht mit spielender Leichtigkeit auf die
Schultern genommen. Jetzt ging er schon unter der Last von
sechsen gebückt und mühsam.
Als er zum letztenmal zum Felde gehen wollte, um die letzte
Tracht zu holen, begegnete ihm Marie auf dem Gartenwege. Sie sah
ihn groß an und rief: »Mensch, wie siehst du aus! Fehlt dir was?«
»Ich bin müde,« sagte Peter tonlos.
»Die Stangen sind wohl schwer?«
»Ja ...«
Diese Arbeit war die letzte, die Peter für die Wehlinger
Schulmeistersleute tat. Am Tage darauf zog er in die Herbstferien.
Den Winter sollte er auf dem Seminar zubringen.
Auf jener Höhe, von der er an jenem Vorfrühlingsabend zuerst das
Tal und das Dorf erblickt hatte, blieb er stehen und schaute lange
zurück. Er lehnte sich an eine junge Birke, und diese ließ einige vor
der Zeit gestorbene gelbe Blätter an ihm hinab zur Erde wirbeln. Auf
der Heide ringsum lag das braune Blühen des Herbstes. Keine Imme
summte mehr nach Honig; kein blauer Schmetterling gaukelte über
den toten Blüten. Nur eine Grille zirpte müde und leise, und in der
Ferne rief der Regenpfeifer sein langgezogenes Tühttüht.
Dem Einsamen auf der Höhe lief ein Frieren über den Rücken.
Noch einen Blick tat er in das verlassene Tal, dann fuhr er sich mit
der Hand über die Augen und wandte sich langsam zum Gehen.
Ein halbes Jahr nur nahm die Ausbildung der jungen Schulmeister
auf dem Seminar in Anspruch. Selbstverständlich genügte diese Zeit
nicht, um das Wissen wesentlich zu erweitern oder gar die Bildung
zu vertiefen. Sie diente vielmehr in der Hauptsache dazu, dem
Schulwesen des Landes eine gewisse Einheitlichkeit zu geben.
Manche der alten Schulmeister, die der Anzucht des Nachwuchses
oblagen, gaben ihren Zöglingen allerhand persönliche Liebhabereien
und Wunderlichkeiten mit, selbsterfundene Schnörkel an den
Buchstaben, Rechenmethoden eigenen Gewächses,
theologisierende Privatmeinungen in der Religion und ähnliches.
Das alles wurde in dem halben Seminarjahre heruntergehobelt, und
dann wurden die jungen Leute als fertige und selbständige
Schulmeister wieder auf die Dörfer geschickt. Da mochten sie sich
denn entwickeln, wie ihre Anlagen und die Verhältnisse es mit sich
brachten. Die einen wurden richtige Bauern, denen die
Landwirtschaft obenan stand und die Arbeit in der Schule
Nebensache war. Andere wuchsen sich zu wunderlichen Pedanten
oder Originalen aus, wie sie in den Witzblättern noch heutigen Tages
herumspuken. Aber viele wurden auch tüchtige Menschen, die in der
Schule wie in der Dorfgemeinde, wie in der eigenen Haus- und
Ackerwirtschaft voll ihren Mann standen, das Nötigste die Jugend
lehrten und im übrigen durch Gottesfurcht, Fleiß und Sparsamkeit
Jungen wie Alten ein Vorbild waren. Manches Dorf in stiller Heide
hat wohl noch heute viel von dem Besten seiner Eigenart der Saat
zu verdanken, die vor fünfzig oder mehr Jahren so ein schlichter,
frommer, tüchtiger Mensch mit wenig Kunst und treuem Herzen
ausgesät hat.
Peters Lebensschiff begehrte ja damals, als der volle Wind in
seinen Segeln stand, nach ferneren Zielen als nach der nächsten
besten weltverlorenen Nebenschulmeisterei. Seit es aber im Sturm
Mast und Segel verloren hatte, war es mit dem nächsten kleinen
Hafen zufrieden.
Für die Aufnahme in das Seminar sollte Peter ein von einem
beamteten Arzt ausgestelltes Gesundheitszeugnis beibringen. Als
der Amtsphysikus des nächsten Fleckens ihn untersucht hatte,
fragte er, ob seine Eltern noch lebten. Peter sagte, seine Mutter wäre
seit vierzehn Jahren tot, und auf die weitere Frage des Arztes, woran
sie gestorben wäre, sie hätte viel husten müssen. »Haben Sie
niemals einen Schmerz in der linken Brustseite gefühlt?« fragte der
Arzt weiter. »Ja,« sagte Peter, »vor ein paar Monaten hab' ich einmal
schrecklich laufen müssen, und da hat es hier in der Brust mir zuletzt
sehr weh getan. Zuweilen fühle ich das noch an derselben Stelle.«
Der Arzt überlegte einen Augenblick, mit den Fingern auf den Tisch
trommelnd, dann setzte er sich hin, zu schreiben. »Sie haben,«
sagte er dabei, »einen kleinen Knacks in der Lunge weg. Sie
müssen sich gut ernähren und viel in die frische Luft gehen. Dann
heilt das wohl wieder aus und vernarbt. Das hat man oft.«
Um dieselbe Zeit sprach der Pastor von Olendorf gelegentlich
einer Amtshandlung in Wehlingen bei Schulmeister Wencke vor, der
seinen Vorgesetzten mit ebenso tiefen wie steifen Bücklingen
empfing. »Ich muß,« sagte dieser, »ein eingehendes Zeugnis für
Peter Eggers an das Seminar schicken, kenne ihn aber zu wenig
und möchte mich deswegen mit Ihnen beraten. Ich mache mir gleich
Notizen. Fleiß?«
»War sehr gut,« sagte Schulmeister Wencke mit Nachdruck, »er
hat viele dicke Bücher durchgelesen. Meine Bücher alle zusammen,
und hat sich noch welche zugeliehen.«
»Betragen?«
»Hat sich immer sehr gut betragen. Fürs Weltliche, was den
jungen Leuten heutzutage mächtig im Kopfe sitzt, hatte er gar keinen
Sinn.«
»Fähigkeiten und Leistungen?«
»Das ging auch an. Ich denke, dieser Zögling soll mir noch Ehre
machen.«
»Wollen Sie noch ein allgemeines Urteil über seinen Charakter
abgeben?«
»Jaa, das ist nun so' ne eigene Sache. Wenn ich ehrlich sein soll,
es fehlt ihm wohl an Gemüt.«
»So? Ob Sie sich da nicht täuschen? Wenn ich so an die Augen
des jungen Menschen denke ...«
»Och, Herr Pastor, ich habe ihn zweiundeinhalb Jahr in meinem
Hause gehabt. Wenn man einen da nicht kennen lernt! Und denn
so'n alter Schulmeister, der bald fünfzig Jahre Schule gehalten hat
— wenn d e r den Menschen nicht bis auf den Grund sieht?
Uebrigens, bei Peter Eggers war das nicht schwer. Als wir neulich
hier im Hause den traurigen Todesfall hatten, sagte mein
Schwiegersohn, gleich nachdem er nur ein einziges Mal mit ihm am
Tisch gesessen hatte: »Vater,« sagte er zu mir, »dieser junge
Mensch scheint sehr wenig Gemüt zu haben.« Naja, woher sollte
er's auch haben, der arme Junge? Sein Vater ist ja leider Gottes
dem Trunk ergeben, und der Apfel fällt nicht weit vom Stamm.«
»Also auch schon Neigung zur Trunkfälligkeit haben Sie bei ihm
entdeckt?«
»O bewahre, Herr Pastor, sehr solide, Herr Pastor. Na, ich wollte
so einem denn auch, hier bei mir im Hause! Wir haben gar keine
Spirituosen im Hause, und ins Wirtshaus komme ich manchmal ein
ganzes Jahr lang nicht hinein. Nur daß man sich mal ein Pfeifchen
gönnt.«
»Das Rauchen ist für einen so jungen Menschen eigentlich auch
noch nicht gut.«
»O bewahre, Herr Pastor, der hat noch keine Pfeife Tabak in den
Mund genommen. Ich wollte ihm auch! Nee, ich wollte man sagen,
daß ich alter Mann mir ab und an mal ein Pfeifchen gönne. Denn ich
halte das für keine Sünde ...«
»Das Zeugnis über die einzelnen Unterrichtsfächer schicken Sie
mir in den nächsten Tagen wohl zu, damit ich es beilegen kann.«
»Jawohl, Herr Pastor, gleich morgen früh sollen Sie es haben.«
Nach den Herbstferien zog Peter also in die Seminarstadt. Durch
einen Marsch von einigen Stunden erreichte er die nächste
Bahnstation und benutzte von hier ab die vor einigen Jahren dem
Verkehr übergebene Eisenbahn. Mit einer Geschwindigkeit, die den
unerfahrenen Heidjer zuerst in Angst versetzte, trug sie ihn seinem
Ziel entgegen.
Die Stadt mit der Fülle ihrer für Peter neuen Eindrücke, der
Seminarbetrieb, das Zusammenleben mit den Altersgenossen, alles
dies wirkte zunächst erfrischend und belebend auf seinen müden
Geist.
Der Direktor des Seminars war ein jüngerer Geistlicher, der die
Leitung der Anstalt erst kürzlich übernommen hatte. Er stammte aus
den Kreisen der kirchlichen Erweckungsbewegung und war bemüht,
seine Zöglinge von der rationalistischen Betrachtungsweise der
Religion, die sie meistens mitbrachten, abzuleiten. Dabei fiel über
die Vernünftigkeit und Plattheit des geltenden Katechismus manches
harte Wort, und Peter stimmte der Kritik innerlich meist zu. Aber was
sein Lehrer an die Stelle setzen wollte, das leuchtete ihm deshalb
noch nicht ein. Und selbst wenn nicht so viele harte Nüsse darin zu
knacken gewesen wären, würde Peter das Gelehrte sich kaum
innerlich angeeignet haben. Denn jenes zarte Vertrauensverhältnis
zwischen Lehrer und Schüler, das gerade für diesen Unterricht
unbedingt nötig ist, soll er nicht das gerade Gegenteil von dem
wirken, was mit ihm beabsichtigt wird, kam zwischen Peter und
seinem Direktor nicht zustande. Dieser, der in dem Pastoralzeugnis
gelesen hatte, daß Peter wenig Gemüt zu haben scheine, mochte
von vornherein ihm nicht ohne Mißtrauen begegnet sein, und Peter
war so geartet, daß er einem Menschen, der ihm nicht mit vollem
Vertrauen entgegenkam, einfach sein Herz verschloß. Er hatte das
Gefühl, daß sowohl der alte Katechismus wie auch der junge
Direktor sehr viel von Gott und göttlichen Dingen wußten, aber wer
von beiden recht hatte, und ob überhaupt einer von ihnen recht
hatte, blieb ihm ungewiß, und er fühlte auch keinen Zwang in sich,
sich darüber zu entscheiden. Wenn die studierten Herren sich nicht
einmal darüber klar und einig werden konnten, wenn, wie der
Direktor sagte, auf den Universitäten auch der Kampf zwischen den
Professoren über diese Fragen hin und her wogte, was sollte denn
so ein armer Schulmeister machen?
Das Seminar war Internat, und Peter mußte sein Zimmer mit zwei
Seminargenossen teilen. Und während des Unterrichts, in den
Pausen, beim Essen, war er mit der ganzen Schar zusammen. Dies
war ihm anfangs nicht unangenehm. Es riß ihn ja auch von dem
Grübeln über das Vergangene und Verlorene hinweg. Dieser Verkehr
verschaffte ihm auch manchen Einblick in andere Art und fremdes
Leben, der ihm, dem Lebensunkundigen, wertvoll sein mußte. Aber
er fühlte immer wieder, daß er ein langweiliger Geselle war, der sich
selbst nicht geben konnte. Was war denn in seinem Leben, das sich
andern mitteilen ließ? Die andern erzählten von zu Hause. Daran
dachte er am liebsten nicht einmal. Die andern machten sich über
die alten Schulmeister lustig, bei denen sie in die Lehre gegangen
waren. Ueber des alten Wencke Wunderlichkeiten Witze zu reißen,
fehlte es Peter sowohl an Begabung wie an Lust. Die andern zogen
hin und wieder einander mit zarten Verhältnissen auf, und es waren
auch mehrere unter ihnen, von denen die Rede ging, sie wüßten
genau, wen sie im nächsten Frühjahr zur Frau Schulmeisterin
machen wollten. Wenn auf derartiges die Rede kam, fühlte Peter
einen heißen Schmerz und stürzte am liebsten davon.
Manchmal mußte er sich wundern, wie viel andere erlebt hatten,
und kam sich ihnen gegenüber vor wie ein unerfahrenes,
unbeholfenes Kind. Aber dann kam's ihm plötzlich wieder zum
Bewußtsein, daß er viel, viel mehr durchgemacht hatte als die
andern. Nur war es nicht derart, daß man davon erzählen, damit sich
aufspielen, darüber Scherze machen konnte.
Einige Kameraden begegneten ihm, denen gegenüber er das
Gefühl hatte, als ob aus ihnen etwas Verwandtes ihm
entgegenkäme, und er versuchte, sich ihnen zu nähern. Aber zu
einer wirklichen Freundschaft kam es nicht. Der Boden, auf dem
eine rechte Jugendfreundschaft gedeihen kann, war in ihm, der der
Liebe Lust und Leid so früh und so tief erfahren, wohl schon zerstört.
Und das geräuschvolle, genau geregelte Anstaltsleben war dem
Werden einer solchen in einem Menschen von der Veranlagung
Peters ohnehin nicht günstig.
So vereinsamte er mehr und mehr unter seinen Kameraden. Die
einen hielten ihn für stolz und unkameradschaftlich, andere sahen in
ihm einen Kopfhänger, noch andere meinten einfach, es wäre aus
ihm nicht klug zu werden. Und alle ließen ihn seiner Wege gehen
und kümmerten sich nicht um ihn.
Dieses Verhältnis zwischen Peter und seinen Mitseminaristen
entging auch den Lehrern nicht, welche dadurch das Urteil des
mitgebrachten Zeugnisses und die eigenen Eindrücke bestätigt
sahen. Als sie einmal in der Konferenz ihre Ansichten darüber
austauschten, erhob sich aber doch eine Stimme des Widerspruchs.
Der Jüngste des Kollegiums, der erst kürzlich von seiner Dorforgel
an das Seminar versetzt war, sagte: »Ich glaube, in diesem Peter
steckt mehr, als es zunächst scheint. Es fiel mir in der Gesangstunde
auf, daß er musikalisch sehr begabt ist. Und da habe ich nun aus
Liebhaberei angefangen, ihn im Geigenspiel privatim etwas
vorzunehmen. In der Art, wie er die Geige anlegt, in dem Ausdruck
seiner Augen beim Spielen liegt etwas, was mich zweifelhaft macht,
ob der junge Mensch in unserm Kollegium ganz richtig beurteilt
wird.« Die älteren Herren lächelten mild im Bewußtsein ihrer teils
durch Universitätsstudium, teils doch durch höheres Lebensalter
erworbenen überlegenen Menschenkenntnis, und der Direktor sagte,
leicht verweisend: »Mein lieber junger Freund, Sie sind geneigt, die
Menschen allzusehr nach dem Verhältnis zu Ihrer geliebten Musik zu
beurteilen. Peter Eggers stammt aus den gedrücktesten und
unglücklichsten Familienverhältnissen, und in solchen Menschen
kommt das Beste, das Herz, das Gemüt, nicht zur Entwicklung. Ich
merke das besonders in der Religionsstunde. Aber den andern
Herren wird das auch nicht entgangen sein.« Diese nickten, und der
Jüngste schwieg. Aber er hörte, nicht auf, den Vereinsamten auf sein
Zimmer zu rufen — er selbst wohnte auch im Seminargebäude —
und den Unterricht, den einst Schulmeister Wencke so schnell
abgebrochen hatte, fortzusetzen. Er hatte an den Fortschritten
seines Schülers viel Freude. Aber der Mensch blieb ihm nach wie
vor rätselhaft.
Eines Abends, als über dem Geigenunterricht die Dämmerung
hereingebrochen war, schloß der Lehrer das Notenheft, nahm selbst
die Geige zur Hand und spielte Händels Largo. Als er den letzten
Ton verklingen ließ, hörte er Peter leise schluchzen. Er legte ihm
sanft den Bogen auf die Schulter und fragte teilnehmen: »Was ist
dir?«
Peter schwieg.
»Willst du's mir nicht sagen?« fragte der Lehrer, indem er den
Bogen auf den Tisch legte und nach Peters Hand griff.
»Ach, solche Musik wühlt alles wieder in einem auf ...«
»Was denn ...?«
Peter schwieg.
»Du hast es wohl zu Hause nicht leicht gehabt?« fragte der Lehrer
mitleidig.
»Och, das ist es nicht ...« sagte Peter und schüttelte den Kopf.
»Kannst du's mir denn nicht sagen? Ich frage dich nicht als dein
Lehrer, sondern als dein Freund. Einem Freunde einmal sein Herz
ausschütten, das tut wohl ...«
»... Als ich bei Schulmeister Wencke in Wehlingen war, ... als ich
da zwei Jahre gewesen war, ... als ich letzte Ostern nach den Ferien
wieder hinkam ... ich ... ich kann's Ihnen doch nicht sagen ...«
»Denn quäle dich nur nicht ... Du sagtest erst, die Musik wühle
das alles wieder auf. Ja, das tut sie wohl. Aber sie bringt es auch
fein sanft wieder zur Ruhe. Sie ist eine holde, freundliche Trösterin
...«
»Ja, das fühle ich wohl ...«
»Komme nicht erst in vier Tagen wieder, sondern schon morgen
nachmittag. Wir wollen diese letzten Wochen bis Ostern jeden Tag
ein halbes Stündchen geigen, damit du dir nachher selbst
weiterhelfen kannst. Willst du?«
»O Herr Seminarlehrer!« —
Peter hatte also einmal einen Menschen gefunden, der ihm mit
warmem Herzen entgegenkam. Es fiel wieder einmal ein
Sonnenstrahl in sein armes Leben hinein, und sogleich war's, als ob
es unter dem warmen Anhauch neu aufblühen wollte. Die
Kameraden wunderten sich nicht wenig, daß Peter plötzlich viel
kameradschaftlicher und munterer erschien, und gingen dem
Verkehr mit ihm nicht mehr so ängstlich aus dem Wege. Der Herr
Direktor war erstaunt, daß Peter anfing, Antworten zu geben, die
eine innere Anteilnahme verrieten. Ja, dachte er, wenn man's nur
versteht, den jungen Leuten ans Herz zu kommen! In der letzten
Konferenz vor der Schlußprüfung sagte er: »Über Peter Eggers habe
ich mich die letzten Wochen recht gefreut. Er hat sich bei uns gut
herausgemacht. Die Herren werden das auch gemerkt haben.« Die
Herren nickten zustimmend, nur der Jüngste unten am Tisch nicht.
Der lächelte ganz fein vor sich hin.
Peter bestand die Abgangsprüfung gut. Die halben Stunden bei
dem freundlichen Manne und bei seiner Musik hatten ihm ein so
frohes Lebensgefühl gegeben, daß er frisch und munter antworten
konnte und in dem rechten Augenblick sich an manches erinnerte,
was er einst in Wehlingen gelesen oder gelernt, aber längst
vergessen geglaubt hatte. Bei der Bekanntmachung des
Ergebnisses schüttelte der Direktor ihm besonders herzlich die Hand
und sprach die Hoffnung aus, ihn nach einigen Jahren als
Hauptseminaristen wiederzusehen.
Am Abend des Prüfungstages ging Peter zu seinem Musiklehrer,
um sich von ihm zu verabschieden. Als er bei ihm eintrat, sagte
dieser: »Ich habe mir gedacht, du kämst doch wohl nicht fürs erst
dazu, dir eine Geige anzuschaffen. Und es wäre doch schade, wenn
du das Spielen unterbrechen müßtest. Ich habe nun zufällig für
einen Spottpreis ein ganz gutes Instrument kaufen können und
möchte dich bitten, es von mir zum Andenken und aus Liebe zu
unserer gemeinsamen Freundin, der Musik, anzunehmen. Hier
ist's.« Peter starrte abwechselnd seinen Lehrer und die ihm in die
Hand gedrückte Geige an, und suchte nach Worten. Aber der
feinfühlende Mann half ihm darüber hinweg. »Probier' man gleich
mal,« sagte er munter, »oder laß uns mal zweistimmig etwas
spielen. Vielleicht einen Choral? Schlag' mal einen vor! Gestimmt
habe ich die Geige schon.« Peter schwieg noch immer.
»Na, was soll's sein?« fragte der andere und setzte seine eigene
Geige an. Da sagte Peter hastig: »Lobe den Herrn, den mächtigen
König der Ehren,« faßte die Geige und ließ dreimal nacheinander die
Saiten die jubelnde Weise jauchzen. Und der Seminarlehrer spielte
ebenso freudig bewegt die zweite Stimme dazu, und dachte im
stillen, indem er in Peters glückverklärte Augen sah: Das ist nun
einer ohne Herz und Gemüt. O ihr klugen Menschenkenner!
Als Peter die Geige absetzte, fing er an zu stammeln: »O Herr
Seminarlehrer, w ... was soll ich ... bloß ...« »Du sollst bloß den
Mund halten,« sagte der lächelnd und hielt ihm den Rücken seiner
Geige vor den Mund. »Was du meinst und fühlst, das hast du ja
eben schon mit deiner Geige gesagt. Möge sie dir eine gute
Freundin werden, die in der Freude mit dir jubelt und im Leid mit dir
weint und dich durch ihr mitfühlendes Herz tröstet.«
»O Herr Seminarlehrer!« —

Am Tage darauf — es war am Sonnabend vor Palmsonntag —


setzte Peter sich auf die Eisenbahn, um nach Hause zu fahren. Das
gute Examen, die ihm vom Direktor gemachte Aussicht auf das
Hauptseminar, die Erinnerung an den freundlichen Musiklehrer, die
Geige, die in ihrem schwarzen Kasten nahe bei ihm stand, die
frische Märzluft, der Sonnenschein, der in die Fenster des
Wagenabteils fiel, alles wirkte zusammen, Peter in eine frohe und
mutige Stimmung zu versetzen.
Auf einer größeren Station, wo die Lokomotive Wasser einnehmen
mußte, stieg ein alter Bauer ein, musterte die drei Insassen des
Wagenabteils, unsern Peter, einen Handlungsreisenden und eine
Bauerfrau, und machte sich's bequem.
»Wat hollt he hier so lang?« fragte die Frau den Bauern.
»O,« sagte dieser trocken, »dat Peerd is noch jung; dat möß eben
mal an'n Titt.«
Die drei Fahrgäste lachten, jeder auf seine Art: Peter still, die Frau
hehehe, der Handlungsjüngling hihihi.
Der Bauer klopfte mit dem Knöchel seines Mittelfingers auf Peters
Geigenkasten und fragte: »Wat hett he dar in?«
»'n Vigelin'.«
»Kann he spälen?«
»'n bäten.«
»Denn späl he mal eenen up!«
»Och ...« sagte Peter zögernd.
»Man to; dor geiht de Tied bi hen,« fiel die Frau ein.
»Sain Se doch kain Frosch und tun Se's. Ain luschtiges
Schtickche verkürzt die Fahrt durch de langwailige Lineburger
Haide,« ermunterte der Handlungsreisende.
Peter, in der frohen Laune nach wohl bestandenem Examen, ließ
sich erbitten, nahm seine Geige und fidelte munter darauf los: Muß i
denn, muß i denn zum Städtele naus, den Dessauer Marsch, und
was ihm sonst in die Finger kam.
Als er aufhörte, weil seine Station nahe war, fragte der alte Bauer:
»Is he Spälmann?«
»Nee.«
»Wat denn?«
»Scholmester.«
»Wonem hollt de Schol?«
»Heww noch keen Schol. Kam hüt eben von't Seminar.«
»Deuker! Dat könn passen. Ick bin ut Solten. Dat liggt'n halbe
Stund' van Brundörp. Wi bruckt just'n Scholmester.«
»So—o?«
»Weet he wat? Ick kann god mit unsen Herrn Zupperndenten. Dar
gah ick morrn vor de Karktied hen. Denn, schall he man sehn, kriggt
he den Deenst.«
»Scholstellen sünd upstunns genog to hewn,« sagte Peter. »Wenn
ener'n god Tügnis hett, kann he sick'n Platz utsöken. Makt jo keen'
Umstänn' von min'thalwen, Vader.«
»Wenn ich m'r darf erlauben ain gut gemainte Rat,« mischte sich
der Handlungsreisende ein, »ich wird' gehen nit zu de Bauern, ich
wird' gehen in de Schtadt zu de jebildete Lait'.«
»Di hollt keener fast,« sagte der Bauer trocken. »Dine Ort[9] könnt
wi up'n Lanne nich bruken. Aber, wat ick man seggen woll,« wandte
er sich wieder zu Peter, »god schall he't bi uns in Solten hewn. Wi
sünd alltohopen gode Lüe.«
Der Zug pfiff, Peter mußte aussteigen.
»De Zupperndent well em woll schriewen. Und wenn he nah
Solten kummt, denn frag' he man glieks nah Clas Mattens ...« rief
der Alte ihm nach. »Aber deukerweg, ick weet ja noch gar nich, wat
sin Nam' is, und wo he to Hus is?«
Er lehnte sich aus dem Wagenfenster und Peter rief dem Zuge,
der sich schon wieder in Bewegung gesetzt hatte, seinen Namen
und Wohnort nach. Dann machte er sich rüstig auf den Marsch nach
Hause, wo er spät am Abend ankam. An die Begegnung in der
Eisenbahn dachte er kaum wieder zurück.
Fünf Tage später bekam er ein Schreiben folgenden Wortlauts:
»Es gereicht mir zur Freude, Ihnen mitzuteilen, daß Ihre
Bewerbung um den Schuldienst zu Solten, die durch den
Bauern Claus Mattens an mich gelangt ist, von mir als
dem Patron der genannten Stelle berücksichtigt worden
ist. Ich habe Sie bereits gestern Hohem Königlichen
Konsistorio präsentiert, und wird Ihre Anstellung zweifellos
unverzüglich erfolgen. Es wird gut sein, wenn Sie gleich
nach dem Feste sich mir vorstellen und mit den
Schulverhältnissen bekannt machen wollen. Der Weg von
Ihrer Heimat nach hier beträgt gute vier Stunden, was ja
für einen gesunden jungen Mann eine Kleinigkeit ist. Sie
müssen über Wiechel gehen.
B
eerbohm, Superintendent.«
Peter machte große Augen, als er diesen Brief las. Er ärgerte sich
zunächst, daß der zufällige Reisegenosse auf solche Weise in sein
Schicksal und Leben eingegriffen hatte. Dazu kam, daß sein Vater
und er sich folgenden Tages das Schulhaus eines näher gelegenen
Dorfes ansehen wollten, von dem viel Rühmens gemacht wurde.
Aber bald gab Peter sich zufrieden. Aus dem Briefe des
Superintendenten schien ihm Wohlwollen zu sprechen. Der alte
Bauer in der Eisenbahn hatte ihm auch nicht übel gefallen, und allzu
nahe bei Muttern zu bleiben, darauf kam es ihm ja nicht gerade an.
Am Dienstag nach Ostern machte Peter sich auf, um seinen
Vorgesetzten und seine künftige Wirkungsstätte kennenzulernen.
Der Vater bestand darauf, ihn zu begleiten.
Anfangs gingen sie schweigend nebeneinander. Aber bald kam es
Peter vor, als ob der Vater etwas Besonderes auf dem Herzen hätte.
Er räusperte viel und spuckte übermäßig oft aus. Endlich machte er
Anstalt, damit herauszukommen.
»Peter, ick mutt di mal wat seggen.«
»Man to, Vader.«
»Weeßt du, wat Mudder und ick uns dacht hewwt?«
»Nee.«
»Wi wollen woll mit di trecken[10].«
»Mit mi? Nah Solten?«
»Ja, min Jung. Süh, dat is bäter för di. Denn mak ick di fein dat
Land to Schick[11]. Du kriegst da doch nix van torecht. Bist ja de
starkste nich, din sel' Mudder wör't ok nich. Und Trina, de kakt[12] di
denn wat ... Dat du dine Uppassung[13] hest ... Süh, 'n Fro kannst du
di noch nich nehmen. Da bist du to jung to ... Wat makst du för'n
Gesicht? ... Is Trina de lesten Johren nich jümmer ganz god mit di
wän?«
»Och ja, dat güng woll ...«
»Süh, uns well dat in dat ole Hüsselhus gar nicht mehr recht
gefallen. De Bur lett us dat Dak so rein öwer'n Kopp tohopen fallen.
Und Land hewwt wi ok nich genog to Katuffeln for de välen Kinner.«
»Und det schöt denn ok alle mit nah Solten?«
»Alle nich. De beiden öllsten könnt wi all verme'en[14].«
»Denn sünd dat noch veer ...«
»Nee, fief.«
»Is dat nich'n bäten väl för so'n Scholhus?«
»Och nee. Wenn de in so'n Hüsselhus ünnerkreepen[15] könnt,
hewwt se in so'n grot Scholhus Platz mehr als to väl.«
»Meenst du ...?«
»Hm, süh, dat wär doch schön, wenn du dine lütten Bröers und
Süsters[16] sülwst als Scholmester lehren künnst.«
»Och ... dat will ick just nich seggen. Und wenn se mal wecke
verdeent hewwt und ick hau' jüm, wat seggt ehre Mudder denn?«
»Dar is se god van stellt.[17] Up't Hauen hollt Trina grote Stücke.«
»Dar hest du recht. Aber wenn i c k e h r Fleesch und Blod hauen
do, dat well ehr doch woll nich passen.«
»Och, Peter, dat well so slimm woll nich wän. Und dat si di sleit, da
brukst du nich bange vör to wän. Se fat't di nich mehr an.«
»Is dankenswert. Dar harr ick ok keene rechte Lust mehr to.«
»Du bist also davon tofreden, dat wi mit di treckt ...?«
»Och Vader, da mutt ick mi erst up besinnen. Wi möt ok erst
tosehn, wenn dat in Solten mit dat Hus und dat Annere passen deit.«
»Da hest du recht; deshalw bin ick ok hüt mit di gahn.«

You might also like