Index

Symbols

"<=>" operator 279
"=" operator 291, 434
"0+" operator 283, 434
"bool" operator 284, 434
#line directive 315
$ (scalar type specifier) 21
     as dereferencer 37
$#array_name 23
$^W variable 90
$_[0], assigning to 341
$AUTOLOAD 55, 91, 338
$VERSION 54
% (hash type specifier) 26
     as dereferencer 37
%FIELDS 130
& (subroutine type specifier) 29
     and goto 30, 264
     in subroutine call 30, 83
&AUTOLOAD 55, 91, 171, 195, 269, 281, 338, 352, 431
     and array-based objects 123
     as generic method 327
     as generic subroutine 56
     cost of 93
     destructors 112
     efficiency 93
     learning from experience 93
     non-public attributes 92
&can 179, 210, 338
&CLEAR 249
&clone method 105
&CLOSE 257
© method 105
&DELETE 244
&DESTROY 106, 176, 238, 244, 250, 257
&EXISTS 244
&EXTEND 249
&FETCH 238, 244
&FETCHSIZE 249
&fingerprint 265
&FIRSTKEY 244, 262, 263
&GETC 257
&import 52, 54, 331
&import subroutine 60
&isa 179, 361
&mutate 265
&new 96
&NEXTKEY 244, 262, 263
&OPEN 257, 260, 268, 273
&POP 250
&PRINT 256, 273
&PUSH 250
&READ 257, 273
&read_only subroutine 83
&READLINE 257
&SEEK 268
&SPLICE 250
&STORE 238, 244
&STORESIZE 249
&TIEARRAY 249
&TIEHASH 244
&TIESCALAR 238
&TRUNCATE 268
&VERSION 54, 182
*
     Class::Struct type specifier 217
     multiplication operator 293
     typeglob type specifier 60
*foo{THING} syntax 63
*symbol_name typeglob syntax 60
++ operator 241
+= operator 241, 294
. operator 283, 293
.login file 53
.pm suffix 51
:: package name separator 44
<=> operator 280, 286
<> operator 166, 257
=> operator 26
     for named arguments 31
> operator 141, 430
     calling class methods 79
     extension to method calls 75
     not used for scalar references 137
?: operator 102, 284
@ (array type specifier) 22
     as dereferencer 37
@_ array 29, 76
     aliasing 33
     copying to avoid aliasing 33
@array_name 23
@EXPORT 410
@INC 52
@ISA 168, 191, 431
^ operator 293
__DATA__ 335
_Initializable class 173
|| operator 102
~ operator 141

Numerics

1, at end of module 53
2001 381

A

ABC 12
abstract base class 12, 343, 459
abstract data type 459
abstract method 12, 185, 232, 344, 418, 432, 459
     in other languages 452, 456
     other terms for 18
abstract object 12
abstract relationships 6
abstraction
     of arguments 356
     of regular expressions 145
     vs genericity 327
access
     class attributes 85
     direct vs encapsulated 297
     discouraging direct access 82
     hash-like 132
     memory mapped 416
     restriction of 198
     specifier 298
     speed, hash vs array 119
     Tie::SecureHash 311
     to class attribute 200
     to data 152
     to every object of a class 306
     to external data 393
     to objects via references 291
access mechanism 2
accessibility
     of lexicals used in scalars 57
     vs existence 57
accessing typeglob slots 62
accessor 82, 122, 304, 418, 430, 459
     as a convenience 300
     explicitly coded 123
     for class hierarchy only 301
     for persistent class 427
     for persistent objects 415
     generating 213
     get/set 224
     tedious to write 91
accidents 297
actual target 370, 372, 459
Ada 19
add-assignment operator 241
address space 389
adopting new behaviour from helper class 338
Advanced Perl Programming 69, 166, 274, 326, 428
advantages
     of hash-based objects 136
     of inheritance 414
aesthetics 186, 423
affordances 83, 151, 293, 459
aggregation 14, 418, 459
     advantages 15
     of persistent variables 411
algebra 292
Algol 454
alias
     behaviour of @_ 33
aliasing 459
     of $_[0] 423
aliens 237
all-or-nothing encapsulation 309
ambiguity
     in inheritance 9
     in multimethod initialization 360
     in multiple dispatch 370
     indirect object syntax 99
     of handlers 367
     of unqualified secure-hash keys 317
ancestor 360
ancestor class 459
Ancient Greek gods 46
anonymous array 40
     as object 429
     as pseudo-hash 132
     as sorted hash cache 264
     mortality of 49
anonymous hash 41, 77, 304
     as implementation object 242
     mortality of 49
anonymous scalar
     creating 136
anonymous subroutine 42, 261, 298, 329
     as closure 57
     as lexer 156
     as multimethod handler 358
     as object 152
     as operator implementation 278
     as private method 87
     calling 42
anonymous typeglob 165, 253, 415
anti-Thursday 281
Aphrodite 46
arbitrary operations 293
argument
     abstraction of 356, 368
     aliasing 76
     constructors that take many 101
     default 102
     first 352
     forgetting 101
     in other languages 450
     list as hash 101
     original list 359
     reversed 286, 433
     single 374
     to method 75
     to overloaded operator 278
     to subroutine 29
     unfamiliar 363
arithmetic operation 283
array 22
     already generic 328
     anonymous 40
     as object 76, 119
     as stack or queue 24
     change in size of 249
     Class::Struct 214
     index 283
     initialization 23
     length 23
     look-up 130
     natural choice of 123
     of references to attributes 201
     passing to subroutine by reference 42
     persistent 410
     pretending to be hash
      See pseudo-hash 126
     reference to 420
     slice 25
     tied 249
array index
     as object 304
array slice 199
     for initialization 122
arrow operator 38, 291, 430
ASCII
     ancient Romans, non-use of 284
     to EBCDIC 261
Ashton-Jones, Gary xviii
assignment
     composite operators 241
     non-overloadability of 278
     object-to-object 103
     of arrays 249
     of references 291
     of typeglobs 60
     to attribute 216
     to typed variables 131
     undetectability of 412
     vs overloaded 292
ATM 2
     aggregating attributes 15
     attributes 3
     methods 3
Atropos 46
attribute 2, 430, 459
     access list 93
     accessor 82
     class 228
     class attribute 430, 432
     Class::Struct 215
     code-like 231
     collisions under inheritance 186
     computed and memoized 150
     encapsulation 434
     flag-like 226, 432
     hash 228, 432
     in other languages 439, 444, 450, 454
     inheritance of 170
     internal 78
     key-like 226, 432
     list 432
     logically grouped 225, 432
     of an object 78
     physically grouped 227, 432
     polymorphic 316
     private 301, 309, 315, 326
     protected 309, 318, 325
     public 309, 318, 325
     readable labels for 119
     scalar 224, 432
     single-bit 226
     storage and retrieval 400
     subroutine 231
     type 215
     unique value 226
     which is an object 228
attribute value 2, 460
     retention of 16
autogeneration of operators 281
autoloaded method 91
automagical
     multiple dispatch 367
     operators 286
automatic persistence 397, 400
automation of dynamic dispatch table 367
autovivification 119, 227, 248, 297, 460
     and pseudo-hashes 127
     and securehashes 312, 325
awk 397

B

Bach, Johann Sebastian 412
Back to the Future 411
backquotes 56
Bad Things 82
balanced heap 347
Banzai, Buckaroo 43
bar, polymorphic pick-up lines 9
bar-codes 239
bareword class name 99
Barr, Graham xviii
base class 5, 460
base class destructor
     invoking 176
base.pm module 191, 309
bases (genetic) 250, 265
basic ideas of object orientation 1
Beattie, Malcolm 416
bed-swapping 307
BEGIN block 331, 398
beginners 309
behaviour
     emergent 350, 379
     of a class 179
     of a multimethod 384
     of variables 236
     of variants 368
     post-mortem 424
benefits of object orientation xiv
best fit behaviour 356
bible 69
bibliography 466
big
     city 296
     hairy dot 293
Biggar, Mark 276
binary search tree 16, 339
     insertion 340
     persistent 424
Bit::String class 138
     persistent 413
bit-flag 226
bitmap 232
bits
     addressing via vec function 138
bit-trail 35
Blakey, Adrian xviii
bless function 76, 429
     arguments 77
     in constructor 79
     one-argument form 196, 219
     two-argument form 172, 196, 220, 223, 233, 398, 431
blessing
     and tie-ing to same package 311
     different datatypes into same class 79
     non-hashes 118
     not assigned 103
     scalars 135
     subroutine 152
     tied variables 265
     typeglobs 158
blood pressure 294
Booch, Grady 19
books
     miscellaneous 467
     on object orientation 466
     on other object-oriented languages 454, 467
     on Perl 69, 466
boolean 140, 226
borrowing behaviour 343
bottle-neck encasulation 309
box of chocolates, symbol table entry like a 59
brain
     alien consumption of 237
     surgery vs closures 56
breadth-first multiple dispatch 368, 372, 385
brittle 353
Brocard, Leon xviii
Brown, Vicki 69
browser cache 245
brute force 83
buffered I/O 415
bugs
     $ prototype and scalar context 36
     + documentation = features 344
     || operator and 0 values 102
     accidental breach of interface 302
     aliasing 33
     ambiguous securehash keys 318
     arbitrary or obscure operations 293
     assignment of object references 291
     attribute collision 186
     autovivification of non-existent attributes 119, 248, 297
     calling methods on tied filehandles 273
     changing @ISA array 179
     circular references 108
     code in the wrong package 321
     compile-time diagnosis 131
     conventions not scaling well 296
     data equivalence vs referential equality 306
     documentation of 96
     explicit wait 160
     failure to initialize 98
     fixed dispatch table and derived types 362
     hard-coding class relationships 176
     hunt-and-destroy 183
     in simple peristent class 404
     indirect object syntax 101
     left-most abstract methods 185
     left-most depth-first dispatch resolution 368
     map block returning undef 184
     misgeneralization 83
     misnaming attributes in accessors 91
     missing most of the data 151
     multiplying references 278
     mutating MLDBM hash sub-entries 420
     nested iterators 123
     not "typing" a lexical for pseudo-hashes 132
     not reswizzling memory addresses 389
     object-to-object assignment 103
     opening a tied filehandle 257
     overloading the . operator 293
     overwriting key attributes 227
     package variables vs lexicals 306
     pseudo-hashes and inheritance 191
     qualified vs unqualified securehash keys 324
     security via obscurity 264
     spelling errors 128
     termination whilst saving data 388
     wrong comparison subroutine 330
built-in functions
     bless 76, 429, 431
     caller 35, 264
     close 159, 257
     crypt 136
     delete 244
     do 393
     each 27, 123, 244, 309, 315
     eof 257
     eval 148, 329, 334, 340, 347, 392, 399, 408, 437
     fileno 257
     getc 257
     grep 284
     int 283
     join 140
     keys 27, 244, 315
     local 49
     map 140, 384, 415
     my 46
     open 257, 268
     pack 138
     package 43
     pop 24, 250
     print 256, 415
     printf 256
     push 24, 250
     rand 297, 308
     read 257, 415
     readline 257
     ref 38, 63, 359, 381, 389, 398
     return 29
     -s (file length) 416
     seek 253, 257, 268, 415
     select 257
     shift 25, 250
     splice 25, 250, 363
     split 415
     sprintf 335, 426
     sub 28
     substr 283
     sysopen 257, 393
     sysread 257, 415
     sysseek 257, 415
     syswrite 256, 415
     tell 257
     tie 236, 393, 433
     tied 243, 257, 268
     truncate 254, 257, 268
     unshift 25, 250
     untie 238
     values 27, 244, 315
     vec 138
     wait 160
     wantarray 34
     warn 34
     write 257
     z (zero-sized file) 415
Bunce, Tim xviii, 394
Burke, Sean M. 170, 201

C

C (programming language) 153, 398, 443
C++ xii, 19, 75, 76, 131, 153, 314, 318, 326, 353, 398, 443, 449, 451, 467
caching
     &can 181
     eliminating cache when serializing 399
     multimethod handlers 364
     of generic code template 335
     of methods 171
     of multimethod variants 370
     sorted hash keys 263
Caesar, Gaius Julius 304
caller function 35, 264
     additional return values 35
calling methods
     annoying need to 276
     under inheritance 169
Cantrell, David xviii
cardinal rule of object orientation 82
cardinal virtue 103
carp subroutine 34
cascading messages (Smalltalk concept) 440
case statement 205, 352, 355
case-insensitive keys 245
casual programming 90
cat 245
catch-all
     handler 356, 359
     method 91
     multimethod pseudo-type 382
     subroutine 55
CD::Music
     inheritance of destructor 197
     methods 82
CD::Music::Classical 193
CD::Shiny::Beer 80
cephalopods 13
Cetus Links 19
chain
     of destruction 178
     of references 110
changing read-only attribute 83
chapter summary xiv
character string
     as Roman numeral 290
     encoded 393
     uninterpolated 392
chef 294
child
     class 5, 460
     node 339
     process 159
China 276
choreographed behaviour 350
Christiansen, Tom xviii, 69, 198, 300, 326
circular data structures 108
clarity 293
class 3, 460
     abstract base 12
     adding new methods from &AUTOLOAD 93
     array-based 431
     as blueprint 3
     as package 429
     as shared category 12
     attribute 4, 228, 432, 460
     base 5
     child 5
     class attribute 430
     data 4
     datum 18
     derived 5, 431
     destructor 106
     diagnostics 96
     direct parent 177
     documentation 95
     empty subclass 189
     field 18
     generator 327
     generic 330
     hash-based 431
     helper 150, 423
     hierarchy 460
     implemented by package 74
     in other languages 439, 444, 450, 454
     instance 18
     interaction 109
     intermediate 183
     least-derived 360
     method 4, 429, 460
     mixin 175
     module 89
     name 77, 429
     node 339
     other terms for 18
     parent 5, 431
     persistent 418
     regular expressions 145
     specialization 18
     strutcures 218
     syntax summary 429
     testing 189
     unspecified features 16
     variable 18
     version 96
class attribute 4, 85
     access to 196
     internal use only 198
     other terms for 18
     ownership of 196
     via object attribute 198
class method 4, 85
     constructor 79
     in other languages 440, 447, 450
     other terms for 18
Class::ISA module 170, 201
Class::MethodMaker module 213, 222, 432, 439
     inheritance 233
Class::Multimethods module 367, 385
     last resort 382
     pseudo-types 381
Class::Struct module 213, 431, 439
     inheritance 219
classical music 193
classified lexical
     See typed lexical 132
class-specific persistence 400
cloning before mutation 291
CLOS 19
close function 159, 257
closure 56, 95, 460
     and anonymous subroutine 57
     as encapsulation mechanism 298
     as generic subroutine 329
     implementing genericity 436
     shared lexicals 58
closure-based object 434
coarse-grained persistence 17, 388, 397, 400, 408
code
     collaborative 349
     duplication 183
     efficiency 276
     expediency 293
     extensive, hard to understand 187
     forward-compatibility 196
     generation 214, 392
     intelligible 294
     migration 267
     rarely-used 297
     reuse via cut-and-paste 8
     run-time generation 329
     scaling problems 296
     structural patterns 327
     test code 189
     ugliness 276
CODE slot 60
code-like attribute 231
codons 250, 265
collision
     detection 385
     of inherited attribute names 186
colony organism 14
comic-book profanity 145
communication between objects 198
compactness of encoding schemes 392
comparison
     coarse- vs fine-grained persistence 412
     of multiple dispatch techniques 361, 385
     string vs numeric 343
compile-time
     checking of interface 170
     checking of pseudo-hash accesses 132
complement operator 141
complex numbers 292
composition 460
Comprehensive Perl Archive Network 66
compression 180
compromises 147
consequences of dispatch resolution strategy 372
consistency 380
     of multiple dispatch 367
constant 119
     interpretation of 288
constant.pm module 99
constructor 78, 96, 429, 460
     actions 98
     and bless function 79
     and inheritance 171
     and securehashes 312
     annoying need for 288
     called as object method 125
     called without arguments 103
     calling 79
     Class::MethodMaker 223
     delegation from 431
     failure of 96
     for array-based class 122
     for closure-based objects 298
     for database object 395
     for flyweight objects 304
     for pseudo-hash-based objects 132
     generating 213
     generic 173
     hierarchical calls 170
     in other languages 439, 446, 451
     incrementing global object count 86
     long argument lists 101
     multi-purpose 104
     of persistent class 415
     redefinition for persistence 418
     reimplementing in derived class 219
     reuse in derived class 193, 431
     trivial 223
     unique Perl behaviour 172
container datatypes 61
context
     list 33
     of subroutine call 33
     scalar 23, 33
     string, numerical, boolean 282, 434
     void 33
control, (de-)centralized 349
convenience 316
conventions
     always using constructor 79
     constructor as duplicator 103
     named arguments 102
     prefixing attributes 188
     undef on constructor failure 149
     underscore means 78, 313
     upper-case for constants 120
conversion
     of constants 288
     of exception to undef 149
     of Roman numerals 286
     of securehashes to hashes 321
     operators 282, 294, 434
Convert::EBCDIC module 261
Conway, James and Sandra xviii
coordination 397, 412
copy
     deep 390
     operation 103
copyright 96
coral 14
cost 424
     of deferred calculations 150
     of dynamic dispatch table 366
     of encapsulation 198
     of multimethods 370
     of multiple dispatch 356
     of persistence 388
     of securehashes 321
coupling 241
     of package variables 47
CPAN 66, 96
     CPAN Search website 66
     home page 66
     installing modules 67
     mirror sites 66
     mystical Multiplex Dispatcher 66
     the WAIT search engine 66
CPAN.pm module 67
     configuration 67
crash vs persistence 17
CREATE statement (SQL) 395
creation
     of objects 76, 96, 430
     of table in database 395
Cretaceous era 13
cross-breeding 267
cross-indexing 248
cross-product 293
crypt function 136
cultural
     considerations 138
     solution 188
cumulative effects of inheritance 178
curly braces 41
cursing 64
cursor, of hash 124
cut-and-paste
     for code reuse 8
     vs modules 51
CyberGeek 179

D

dancers 349
data
     access vs representation 14
     encapsulated 82
     execution-specific 389
     internal 82
     loss 388, 404
     on disk 250
data integrity 405
     and persistence 17
data member 18
data structure
     circular 108
     encoding/decoding 390
     for object house-keeping 399
     misbehaving 392
     nested 405, 427
Data::Dumper module 182, 391, 405, 410, 418, 424
     purity 411
database 17
     as persistent hash 400
     choice of 401
     handle 395
     MLDBM module 418
     overheads and complexities, avoiding 408
     relational 394
     simple 393
DB_File module 393, 419
DBD:: modules 394
DbFramework module 427
DBI module 394, 427
deadly sins, seven 22
debugging 297, 306
     bit-strings 141
     caller function 35
     Data::Dumper 392
     dynamic typing vs compile-time checking 328
     hunt-and-destroy 183
     multimethods 384
     scalar assignments 242
     securehashes 320
declarative
     code 157
     initialization 298
     persistence 428
decoupling 14, 267, 460
     of persistence mechanism 411
default
     arguments 102
     configuration for CPAN.pm module 67
     interpolation into hash 161
     multimethod variant 378
     via undef 31
deferred feature 12, 18
deferring computation 150
delegation 183, 195, 349, 418, 460
     from constructor 431
     from tree to root node 338
     of construction 199
     of methods 230, 432
delegation on failure 193
delete function 244
dependency of child class on parent 187
depth-first
     ancestor list 363
     method dispatch 368, 431
     searching inheritance hierarchy 171
dereferencing scalars 137
derivation 18
derived class 5, 431, 460
Dˇsarmˇnien, Fran¨ois xviii
design
     critical importance of 196
     of regular expression class 147
Design Patterns 326
DESTROY 430
destructor 106, 430, 460
     and autoloading 112
     and circular data structures 110
     and inheritance 176
     as the reason for an object's existence 423
     cascade of calls 110
     closing interprocess pipes 163
     for tied array 250
     for tied filehandle 257
     for tied hash 244
     for tied scalar 238
     from base class 176
     hierarchical calls 170
     in other languages 446, 451
     of helper class 424
     reblessing 177
detecting mutation 398
diagnostics 89
     documenting 96
diamond operator 166
dir 31
direct
     manipulation of objects 276
     parent 177
directory listing 31
disambiguation, of multiple dispatch 378
discipline 188, 297
discrepancies in multiple dispatch 384
disillusionment 438
disk access costs for persistence 17
dispatch
     of destructor 176
     of methods 170
     re-dispatch 356
dispatch mechanism 351
     extensible 363
     in other languages 440
     Perl's 379
     predictability 361
dispatch resolution 368, 461
     example 370
dispatch table 358, 385, 461
     dynamic 363
     initialization order 359
DIXIT 291
Dlugosz, John xviii
DNA 250, 265
do function 393
do what I mean 324
doctor 203
documentation 70, 95
     inadequate 297
Dominus, Mark-Jason xviii, 71, 335, 455
door handles 84
DOS command 56
dot-product 293
double colon 44
doublethink 291
downloading CPAN modules 67
dragon slaying 66
driver, DBD::Oracle 395
dual constructor trick 232, 233
duality 291
duplication, eliminating 183
duplicators 103
dwarfs, seven 22
dynamic dispatch table 363
     Class::Multimethod, automation of 367
dynamic typing 16, 22
     in other languages 439
     vs genericity 328

E

each function 27, 123, 244, 309, 315
EBCDIC to ASCII 261
efficiency 241, 280, 297, 416, 424
     of &AUTOLOAD 93
ego 16
Eiffel xii, 19, 309, 454, 467
elegance vs obscurity 150
elimination of duplication 183
embedded object 218
emergent
     behaviour 350
     system 349, 461
empty argument list, omitting 29
empty subclass test 189
emulation of dispatch mechanism 178
encapsulating subroutine 298
encapsulation 2, 18, 59, 201, 296, 434, 461
     "by good manners" 82, 296
     and procedural programming 14
     and qualified array constants 122
     enforced 302
     in other languages 440, 446, 451, 456
     non-enforcement in Perl 82
     of class attributes 86, 298
     of creation in constructor 79
     of I/O 159
     of multiple dispatch mechanism 359
     of paged filehandle 160
     of regular expressions 145
     private attribute 309
     protected attribute 309
     protecting polymorphism 301
     public attribute 309
     strong 5, 299
     unenforced 201
     varying strengths 309
     via closures 297
     via scalars 302
     vs pseudo-hashes 192
     weak 5
     within a tied variable 243
encoding 17, 389, 461
     entire objects 405
     in Perl 391
     objects controlling their own 400
     of objects 399
     serialization 412, 423
     simultaneously 411
encryption 136
     key 227
END block 398, 404, 410, 418, 423
end-of-file 159
enforced encapsulation 296
England 367
entry 26
     declaration in securehashes 312
     non-existent 128
     of hash as database record 394
     used for two purposes 186
environment variables 96
eof function 257
epitaph 106
equivalence, logical 306
errata 71
error
     logical 83
     resynchronization after 157
essentials of object orientation 2
eternal life 57
etiquette 315
eval function 340, 347
     and Data::Dumper 392, 399, 408
     and genericity 437
     as code generator 329, 334
     to protect constructor 148
evaluation
     of persistence techniques 412, 427
event 18
     classes 353
     handling 385
     loop 353, 359, 368, 380
evil half-brother 17
examples
     &analyse_network 110
     &call 43
     &catalyze 35
     &checked_inverse 30
     &cyclic_incr 33
     &hop_along 57
     &initial_sample 35
     &insensitive_less_than 36
     &insert 43
     &listdir 31, 34
     &lock and &unlock 59
     &make_array_ref 48
     &make_sequence 30
     &next_cyclic 33
     &print_recipes 47
     Bit::String 138
     Bug 74, 214, 222
     CD::Music 80, 120, 132, 193, 220, 233
     Chemical/Medicine 317
     Color 322
     Contact and Contact::Persistent 401
     CountFreezings 400
     database class 293
     Database::Access: 53
     DayOfTheWeek 281
     DNA::Sequence 265
     Employee 226
     encoding blessed objects 398
     Encryption::Key 227
     Filtered filehandle 259
     generic tree class 336
     Genome::Array 250
     graphical user interface 353
     Heap class 346
     Image class 232
     Incremental 239
     Insensitive::Hash 245
     IO::Filter 268
     IO::Filtered 270
     IO::Pager 160, 164
     Iterator 151
     Lexer class 205
     Limited_Transceiver 190
     List 231, 328
     multiple dispatch failure 376
     multiple dispatch resolution 370
     object-oriented techniques 418
     Password 136
     PerlGuru 168
     persistent contact information 418
     Personal_Details 225
     pretty-printer 157
     Projectile 119
     QuotedMessage 183
     reference 449
     relational database 395
     Robot package 55
     serialization 390
     Settable/Collection 186, 316
     single vs multiple dispatch 373
     Soldier 298, 302
     SortedHash 263
     stringification 381, 383
     the_Marquis_of_Queensbury_rules 60
     Track module 241
     tracked scalars 264
     Transceiver 128
     Truck 186, 233
     UNIVERSAL &debug method 182
     where to find xv
exception 83, 92, 122, 185, 281, 314, 318, 325, 338, 340, 359, 362, 370, 377, 410, 461
     as argument default 102
     for dispatch failure 12
     in other languages 442, 452
expectation 293
expediency 280, 293
explicit method definition vs &AUTOLOAD 92
explosion, disarming 340
exponentiation 279
Exporter module 55, 89, 408
exporting from object-oriented modules 89
external representation 17
extraction
     of persistent data 394
     of variable names 403

F

factoring out shared code 12
fallability 248
fall-back
     for polymorphism failure 11
     strategy 204
fallback pseudo-operator 281
familiarity 136
fascism
     compile-time errors 344
     linguistic 236
fastidiousness 96
fatal signals 405
Fates 46
Fcntl module 393, 402
feature 18
feature set 18
feedback to pager 163
field 18, 130
     donation 191
     of a pseudo-hash 132
fields.pm module 130, 190, 309, 439
file
     as object 413
     flat 393, 408
     mapping 416
     name 408
     permissions 414
filehandle 60, 159, 253, 414
     memory mapping 417
     object-oriented 268
     tied 256, 268
fileno function 257
fill in the blanks 16
fine-grained persistence 17, 388, 412
FinePersistence module 423
finite state machine 108
FireTruck class 5
flag
     indicating reversed operands 279
     persistent bit-strings 414
flag-like attributes 226
flat files 393
flattening for data serialization 389
flattening of lists 24
flexibility 118, 296, 321, 330, 400
floating-point
     constants 288
     numbers 276
flock of birds 349
flyweight pattern 302, 435, 461
foresight 195
fork 162
forking open 162
format 60
formatting code 157
forward-compatibility 196
forwarded method 229
fragmentation of generic class 334
freeze 388, 390, 391, 394
FreezeThaw module 391, 418
     and UNIVERSAL package 400
Freidl, Jeffrey 69
friendly warning 249
frugality 391
fully-qualified
     method name 173
     package variable names 45
functionality, inherited vs defined 183
functions 24
future-proof code 88

G

garbage-collection
     in other languages 439, 444, 449, 454
gcc 153
GDBM_File module 394
GDP, China vs USA 276
genealogy 204
generation
     code 329
     of code 214, 392
     of consistent unique identity 388
     of dispatch table 368
generator subroutine 57
generic
     "maximum" function 29
     behaviour of abstract method 12
     handler 368
     method 16, 18, 418
     name of parent class 183
     peristence 412
     persistence 424
     subroutine 327, 426
     type 327
generic class 16, 330
     fragmentation of 334
     other terms for 18
generic module 18
generic package 18
genericity 15, 327, 436
     in other languages 444, 457
     the point of 339
     vs abstraction 327
genes, dominant 372
genetic information 250
Genome::Array class 414
gensym 162, 253, 260, 268, 415
getc function 257
get-or-set accessor 224
gigabytes of data 250
global accessibility, badness of 4
glossary 459
glue 21
gods, Ancient Greek 46
good
     manners 201
     sense 186
gory details 13, 68, 400, 417
Gosling, James 449
goto & 264
goto_& 264
G?vert, Norbert 66
granularity of persistence 17
graphical user interface 351
graphics package 292
grep function 284
grouping of attributes
     logical 225
     physical 227
GUI 352
gurus xiii, 71

H

h2xs 53
hack 66
hand-crafted
     multiple dispatch 367
     operator implementations 281
Handel, George 292
handle
     database handle 395
handler 18
     for multiply dispatched methods 358
     generic 368
     more general 360
     overlap of coverage 359
     signal 410
     specialized 359
hard-coded
     &isa method 179
     call to overloaded subroutine 353
     class name 79
     inheritance hierarchy information 176
     method name 75
     parent name in child method 183
     persistence 400
     regular expressions 144
hash 26
     already generic 328
     anonymous 41
     as dispatch table 358
     as normal basis for objects 81
     as object 76, 296
     attribute 228
     autovivification 119
     clearing 247
     curly braces and stringification 26
     entry as database record 394
     extensibility 136
     initialization 26
     iteration 27, 151
     key 283
     keys conferring identity on values 389
     lexical 402
     look-up 130
     multilevel 41
     object-oriented iterator 123
     of hashes 246
     passing to subroutine by reference 42
     persistent 400, 410
     securehash 311
     slice 28, 98
     sorted 262
     tied 243, 311, 393, 400, 418, 419
     vs scalar objects 136
     why commonly used as objects 118
hash entry 26
     as object attribute 78
     non-existent 119
headache 65, 309, 342
heap 344
     insertion 347
heavier subtree 346
helper class 150, 423, 461
hench-person 5
here document 335
hexadecimal constants 288
hibernation 389
hiding data 18
hierarchy
     all classes in 384
     inheritance 11, 169
     interacting with another 367
     multimethod implementing behaviour of 379
     of categories 5
     of genericity 426
     restructuring 343
Hollywood 237
homo sapiens
     class hierarchy 177
     vendax 27
house-keeping 198
     data structures 399
HTML 153
human fallibility 3
hunt-and-destroy 183
hunt-and-replace 321
hybrid 132

I

-I Perl option 52
I/O 159, 256
     buffering of 415
iambic pentameter 9
ID number 239
identification of target in &AUTOLOAD 93
identity 412, 461
     of a flyweight object 306
     of objects 427
     persistent 388
idiom 96, 461
image 352
image-processing 352
immortality 412
implementation 3, 461
     changes to 297
     deviating from design 12
     explicit, of operators 280
     of multiple dispatch 372
     of overloaded operators 280
     of peristence 400
     vs interface 13
implementation object 237, 238, 461
     different type from tied variable 241
implementation subroutine 278
implicit class declaration 190
import 405, 410
important clients 297
inaccessible
     chunks of memory 110
     lexicals 57
inanimate objects 387
include directory 68
include path (@INC) 52
increment operator 241
index 22, 216
     negative 23
     of first element is zero 22
indirect object syntax 98, 163, 186, 222, 306
informal mechanisms 296
information
     caching 399
     hiding 3
ingredients of a persistent system 387
inherent ambiguity 318
inheritability 189
inheritance 5, 168, 418, 431, 462
     advantages 414
     and constructors 171
     and encapsulation 196
     and multimethod dispatch 362
     and securehashes 316
     and tie'able packages 262
     between Class::Multimethod pseudo-types 382
     borrowing behaviour 343
     by peristent subclass 414
     changing relationships 176
     Class::MethodMaker 223, 233
     Class::Struct 219
     complex chains 6
     consequences 363
     distance 317, 370, 372, 462
     empty subclass test 189
     explicit 210
     from someone else's class 187
     hierarchy 169
     implying type relationship 15
     in other languages 441, 446, 451, 456
     left-most parent 170
     meaning of 169
     of CD::Music class 193
     of multimethod 359
     of persistent classes 403
     of pseudo-hashes 190
     of UNIVERSAL package 182
     other terms for 18
     planning ahead 173
     relationships 203, 355
     triumph for 418
inheritance polymorphism 204, 462
     in other languages 456
inherited class 462
INIT block 398
initialization 298
     Class::Struct 219
     extended 362
     hierarchical 173
     loop 195
     of array 23
     of array-based object 122
     of dispatch table 358, 364
     of hash 26
     of perisistent variable 403
     of persistent objects 419
     separation from creation 96
     sequence 173
injections 203
input parsing 153
insecure 82
insertion
     into a heap 347
     into binary search tree 340
inside-out class 152
installing a CPAN module 67
instance 3, 462
     method 18
     variable 18
Instant Justice 306
instant variables 45
instantiation 462
insulated approach 141
insulating client code from changes 230
int function 283
integer constants 288
integrity, of data 388, 405
interaction
     between classes 109
     between hierarchies 367
     of objects 353
intercepting mutation 398
interface 3, 433, 462
     affordance 83
     changes to 405
     Java concept 12
     method-based 277
     other terms for 18
     reuse of 141
     stability 14
     tied variables 236
     vs implementation 13
interface polymorphism 11, 204, 418, 462
     in other languages 441, 451
internal 78
internal representation, translation of 17
interpolation
     code generation 334
     in generic persistence 426
     of regular expressions 143
Interpolation module 335, 350
interprocess pipe 162
intravenous 290
intrinsic behaviour 236
intuitive operations 293
intuitiveness 101, 324
invoking object 75, 462
     in other languages 440
IO:: modules 159
irate users 301
is-a 5, 363, 462
     not bi-directional 6
     transitive 5
ISBN 80
isolating the persistence mechanism 408
iteration
     of hashes 27
     of parent classes 184
iterator 244, 315
     for objects of a class 306
     object-oriented 123
     sorted 262
Iterator class 124, 152

J

jamming 350
jargon 18, 56, 203
Java 70, 76, 314, 353, 398, 449, 467
John
     Glenn or Kennedy? 44
     Whorfin, Bigboote, Emdall, etc. 43
Johnson, Andrew 69
join function 140
JPEG 232, 378
judicious